Hi @ all!
da ich immer ein paar probs hatte mit mehr als einem AJAX Request, hab ich mir mal ne queue funktion "zusammengebastelt". Das grundgerüst hab ich irgendwo in nem forum gefunden und meinen bedürfnissen angepasst (wegen urheberrecht unzo
hier mal der code:
Alles anzeigen
jetzt zu dem problem:
wie man in der zeile zwischen 47 und 48 ( -.- ) sehen kann, wird im fall das ein request noch im queue array liegt die funktion nochmal aufgerufen
-> req(queue[0][0]);
mit dem entsprechenden query string als parameter. problem bei der sache, die funktion ruft sich zwar selbst auf allerdings passiert nix mehr.
Bsp. ich habe ne Seite in der 3 <div>´s fest drin stehen. alle werden per css ausgerichtet.
div 1: navigations menue (linke seite, oben) immer visible
div 2: output, wenn man so will... da werden ALLE daten angezeigt, eigentlich auch immer visible
div 3: div für zusatz anzeigen, wird nur sporadisch benutzt zb bei ausgabe der live suche^^
code:
Alles anzeigen
wie man sieht ist in zeile 6 ne 2. liste die defaultmäßig hidden is und nur per klick auf den link "Anzeigen" visible wird.
in js sieht die routine folgendermaßen aus:
Alles anzeigen
wenn ich das submenü innerhalb der try..catch anweisung und mit settimeout aufrufe funzt das ganze wunderbar... testweise direkt aufgerufen und try..catch auskommentiert, tut sich nix mehr...
wie man in der queue funktion sieht sind einige alerts drin um zu sehen wie weit die jeweiligen query strings kommen...
also nochmal: problem ist, das trotz "funktionierendem" queue die funktion nicht korrekt arbeitet und die entsprechenden daten anzeigt... sprich das submenü
any ideas?
thx a lot -> da BendIt
da ich immer ein paar probs hatte mit mehr als einem AJAX Request, hab ich mir mal ne queue funktion "zusammengebastelt". Das grundgerüst hab ich irgendwo in nem forum gefunden und meinen bedürfnissen angepasst (wegen urheberrecht unzo

hier mal der code:
Quellcode
- var queue = new Array();
- function req(query) {
- if(http) {
- if(http.readyState == 1 || http.readyState == 2 || http.readyState == 3) {
- queueLength = queue.length;
- queue[queueLength] = new Array();
- queue[queueLength][0] = query;
- //alert(queue[0][0]);
- } else {
- if(query == "") {
- http.open('GET', 'scripts/rpc.php', true);
- } else {
- http.open('POST','scripts/rpc.php', true);
- http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
- http.send(query);
- //alert(query);
- }
- http.onreadystatechange = function () {
- var update = new Array();
- if(http.readyState == 4) {
- if(http.status == 200) {
- var response = http.responseText;
- if(response.indexOf('|' != -1)) {
- // alert(queue.length);
- update = response.split('|');
- //alert(update);
- document.getElementById(update[0]).innerHTML = update[1];
- //alert(queue.length);
- }
- } else if(http.status == 404) {
- document.getElementById(update[0]).innerHTML = 'Die Datei wurde nicht gefunden!';
- }
- // alert(queue.length);
- /* Warteschlange abarbeiten */
- queueLength = queue.length;
- // alert(queue.length);
- if(queueLength != 0) {
- req(queue[0][0]);
- queue.shift(); //Erstes Element entfernen, den Rest eine Position nach vorne rücken
- //alert('queue funzt!?');
- }
- }
- };
- if(query == "") {
- http.send(null);
- }
- }
- }
- }
jetzt zu dem problem:
wie man in der zeile zwischen 47 und 48 ( -.- ) sehen kann, wird im fall das ein request noch im queue array liegt die funktion nochmal aufgerufen
-> req(queue[0][0]);
mit dem entsprechenden query string als parameter. problem bei der sache, die funktion ruft sich zwar selbst auf allerdings passiert nix mehr.
Bsp. ich habe ne Seite in der 3 <div>´s fest drin stehen. alle werden per css ausgerichtet.
div 1: navigations menue (linke seite, oben) immer visible
div 2: output, wenn man so will... da werden ALLE daten angezeigt, eigentlich auch immer visible

div 3: div für zusatz anzeigen, wird nur sporadisch benutzt zb bei ausgabe der live suche^^
code:
Quellcode
- <div id="menue" class="links">
- <ul class="navi">
- <li><a href="javascript:show(0)">Status</a></li>
- <li><a href="javascript:show(10);">Anzeigen</a></li>
- <ul id="subanzeige" class="navi" style="visibility:hidden;"></ul>
- <li><a href="javascript:show(11)">Eintragen</a></li>
- <li><a href="javascript:show(12)">Suchen</a></li>
- <li><a href="javascript:show(13)">Einstellungen</a></li>
- </ul>
- </div>
- <div id="ajax" class="ajax" style="visibility:hidden;text-align:center;"></div>
- <div id="ajax2" class="ajax" style="visibility:hidden;text-align:center;"></div>
wie man sieht ist in zeile 6 ne 2. liste die defaultmäßig hidden is und nur per klick auf den link "Anzeigen" visible wird.
in js sieht die routine folgendermaßen aus:
Quellcode
- // gehört zur function show(cat) ...
- case 10:
- closesubs();
- document.getElementById('ajax').style.visibility = "visible";
- req('act=show&what='+cat);
- submen();
- /*try {
- setTimeout("submen()",500);
- }
- catch (E) {
- setTimeout("submen()",1000);
- }*/
- break;
- // function submen
- function submen(){
- if (document.getElementById('subanzeige').innerHTML != '') {
- document.getElementById('subanzeige').innerHTML = '';
- document.getElementById('subanzeige').style.visibility = "hidden";
- } else {
- document.getElementById('subanzeige').style.visibility = "visible";
- req('act=subanz');
- }
- }
wenn ich das submenü innerhalb der try..catch anweisung und mit settimeout aufrufe funzt das ganze wunderbar... testweise direkt aufgerufen und try..catch auskommentiert, tut sich nix mehr...
wie man in der queue funktion sieht sind einige alerts drin um zu sehen wie weit die jeweiligen query strings kommen...
also nochmal: problem ist, das trotz "funktionierendem" queue die funktion nicht korrekt arbeitet und die entsprechenden daten anzeigt... sprich das submenü
any ideas?
thx a lot -> da BendIt
.:Reden Ist Schweigen und Silber Ist Gold:.
real programmers don't comment their code: if it was hard to write, it should be hard to read!
real programmers don't comment their code: if it was hard to write, it should be hard to read!