[AJAX/PHP] pull-down menu werkt traag

Pagina: 1
Acties:
  • 1.789 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Shinji
  • Registratie: Februari 2002
  • Laatst online: 06:27
Ik ben de laatste weken een beetje aan het spelen met AJAX en nu heb ik een pull down-menu gecreeerd voor mijn website.

In de menubalk zie je dan een balkje met de titel van het menu, daarnaast een pijltje wat naar beneden wijst. Als je daar op klikt klapt het menu uit. Echter als je redelijk snel (langzame dubbelklik) er op drukt draait het pijltje wel om maar word vervolgens de content niet weer gegeven.

Ik vermoed dat er iets mis is met mijn PHP-code waardoor deze pagina te traag laad, dus vandaar bij /14.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
session_start();

//De laatste 10 berichten uit de database halen en weergeven
include('inc/dbconnector.php');
include('inc/checklogin.php');

//geef start van de lijst
echo "<ul>";
$result = mysql_query("SELECT pageID,title FROM page WHERE pageCat!=0 AND reqLevel <= $ulevel ORDER BY (pageID) DESC LIMIT 10");

while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    //geef voor elk database record een bullet lijst weer als anker
    printf("<li><a href=\"javascript://\" onClick=\"showPage(%s,'','$PHPSESSID')\">%s</a></li>", $row[0], $row[1]);
}

mysql_free_result($result);

echo "</ul>";


Echter mocht ik de php-code niet sneller krijgen dan moet er een soort buffer komen denk ik die wacht totdat de pagina is geladen.

Dit is mijn javascript die het menutje laat zien of laat verdwijnen:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
var showMenu = true;

function showHideMenu(menuBlock,SID) {
    if(menuBlock == "archief") {
        var objID = "archiefBlock";
        var serverPage = "archief.php?PHPSESSID=" + SID;
        var imgTag = "showHideArchiefImg";
    } else if(menuBlock == "login") {
        var objID = "loginBlock";
        if(loggedIn == false) {
            var serverPage = "loginForm.php";
        } else if (loggedIn == true) {
            var serverPage = "login.php?PHPSESSID=" + SID + "&task=showuserinfo";
        }
        var imgTag = "showHideLoginImg";
    } else if (menuBlock == "calender") {
        var objID = "calenderBlock";
        var serverPage = "calender.php?PHPSESSID=" + SID;
        var imgTag = "showHideCalenderImg";
    }

    if(showMenu == true) {
        document.getElementById(imgTag).src = "images/layout/arrow_up.gif";
        showMenu = false;
        
        var obj = document.getElementById(objID);
        xmlhttp.open("GET", serverPage);
        xmlhttp.onreadystatechange = function() {
            if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                obj.innerHTML = xmlhttp.responseText;
            }
        }
        xmlhttp.send(null);
    } else {
        document.getElementById(imgTag).src = "images/layout/arrow_down.gif";
        showMenu = true;
        document.getElementById(objID).innerHTML = "";
    }
}


Hoe lossen jullie zulk soort dingen op? Hoe zou ik eventueel zo'n buffer op kunnen zetten?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Shinji schreef op zondag 04 november 2007 @ 23:09:
Als je daar op klikt klapt het menu uit. Echter als je redelijk snel (langzame dubbelklik) er op drukt draait het pijltje wel om maar word vervolgens de content niet weer gegeven.
Heb je al gedebugged? Wat kwam daar uit?
Want ik heb al een zwaar vermoeden waar je probleem zit (zonder uberhaupt (echt) naar je code gekeken te hebben), maar dan wil ik dus wel van je weten wat je al geprobeerd hebt om het op te lossen en hoe je gedebugged hebt. Ik vermoed dat het namelijk in je AJAX aanroep zit ;)
Shinji schreef op zondag 04 november 2007 @ 23:09:
Ik vermoed dat er iets mis is met mijn PHP-code waardoor deze pagina te traag laad
Meten = weten. Dus: heb je het al gemeten? Of is het (nog steeds) een vermoeden? Je weet: "Assumptions are the mother of all f*ckups" ;)
Shinji schreef op zondag 04 november 2007 @ 23:09:
Hoe lossen jullie zulk soort dingen op?
Goed gereedschap is het halve werk. Kijk eens naar zaken als FireBug ofzo ;)
Shinji schreef op zondag 04 november 2007 @ 23:09:
Hoe zou ik eventueel zo'n buffer op kunnen zetten?
Daar zou ik pas aan gaan denken als je weet of het überhaupt nodig is ;) Maar je kunt je voorstellen dat er 1001 manieren zijn om bepaalde zaken voor bepaalde tijd te cachen ;)

[ Voor 75% gewijzigd door RobIII op 04-11-2007 23:20 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Ligt het aan mij of is het een beetje raar dat je de navigatie van je pagina met AJAX ophaalt? Persoonlijk denk ik dat het daar niet echt voor bedoeld is. Misschien kun je nog uitleggen waarom je dit nodig hebt op deze manier, je zult maar net de toepassing moeten maken waarin het nodig is ;)

Verder kon RobIII z'n reactie niet beter zijn, helemaal mee eens.