Ajax Problem
Tobias H.
- javascript
Hallo Leute,
ich habe folgendes Problem: Ich habe eine For-Schleife in JS programmiert in welche bei jedem Durchlauf via Ajax eine php-seite aufgerufen werden soll, welche das etwas macht. Das Aufrufen via Ajax auf die PHP Seite funktioniert wunderbar nur kommt es mir so vor, als würde die Schleife einfach weiterlaufen und nicht warten, bis die PHP Seite fertig abgearbeitet ist. Kann das sein und was kann ich dagegen machen?
Hier ein Ausschnit des Quellcodes:
for( var i = 0; i < nl.length; i++ ) {
//...hier steht für das Probel uninteressante sachen...;)
getAjaxConnection( g_homeDirectory+'update.php?feed_id='+id, blank );
document.getElementById( 'updateList' ).innerHTML += "erfolgreich aktualisiert...<br>";
}
Ich würde mich über Hilfe sehr freuen!
LG Tobi
Hallo Tobias,
... nur kommt es mir so vor, als würde die Schleife einfach weiterlaufen und nicht warten, bis die PHP Seite fertig abgearbeitet ist. ...
das A in Ajax steht für Asynchron. Lasse deinen HTTP-Request einfach synchron laufen. (http://developer.mozilla.org/de/docs/AJAX:Getting_Started)
Gruß, Jürgen
Hallo Tobias,
... nur kommt es mir so vor, als würde die Schleife einfach weiterlaufen und nicht warten, bis die PHP Seite fertig abgearbeitet ist. ...
das A in Ajax steht für Asynchron. Lasse deinen HTTP-Request einfach synchron laufen. (http://developer.mozilla.org/de/docs/AJAX:Getting_Started)
Gruß, Jürgen
Hallo,
vielen Dank für die schnelle Antwort. ich habe das ganze jetzt auf synchron gestellt und es läuft soweit recht gut... nur hängt der Browser jetzt solange, bis die ganze for-schleife mit allen aufrufen abgearbeitet ist. ich möchte allerdings, dass nach jedem durchlauf der for-schleife eine kleine nachricht erscheint, sodass ich den fortschritt genau mitverfolgen kann. ich dachte eigentlich, dass es so funktionieren sollte:
for( var i = 0; i < nl.length; i++ ) {
document.getElementById( 'updateList' ).innerHTML += "lese id:"+ id +"... ";
getAjaxConnection( g_homeDirectory+'update.php?feed_id='+id, blank );
document.getElementById( 'updateList' ).innerHTML += "erfolgreich aktualisiert...<br>";
}
aber der browser spuckt die meldungen nicht bei jedem schleifendurchgang aus, sondern erst nachdem alle abgearbeitet wurde. woran liegt das?
LG Tobi
Hallo Tobias,
die meisten Browser rendern die Seite erst, wenn die Javascript fertig sind. Du musst daher das Script unterbrechen. Das geht z.B. indem du die Schleife durch ein Konstrukt mit setTimeout ersetzt; siehe hierzu http://aktuell.de.selfhtml.org/artikel/javascript/timer/
Du könntest deine Requests aber auch asynchron laufen lassen, und jeder ruft in der "onreadystatechange"-Funktion den nächsten Request auf und macht noch eine Kontrollausgabe.
Gruß, Jürgen
Du könntest deine Requests aber auch asynchron laufen lassen, und jeder ruft in der "onreadystatechange"-Funktion den nächsten Request auf und macht noch eine Kontrollausgabe.
Prima. Ich habe das ganze jetzt asynchron gemacht mit einer Kontrollausgabe...funktioniert wunderbar... vielen dank für den guten tipp... ;)
LG Tobi