Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Sowas wie flush() für Javascript [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Sowas wie flush() für Javascript


 
TriphunEM
03-06-2010, 21:22 
 
Hallo,

ich durchlaufe in Javascript eine Schleife, und in dieser Schleife wird syncron per Ajax (jQuery) eine php-Datei aufgerufen welche nur ein Ergebnisstring zurück gibt, mit den ich dann in Javascript weiterarbeite. Funktioniert auch!

Bei jeden Durchlauf der Schleife setze ich eine simplen Fortschrittsbalken, was im Firefox und Opera tadellos funktioniert.

Nur im IE und auch Safari, passiert während des Durchlaufes überhaupt nix, erst wenn die Schleife fertig ist, bekomm ich die Änderungen am Ladebalken zu sehen.

Gibt es da ein Workaround dafür oder eine Lösung. Ich suche eigentlich so etwas wie in php flush();

Danke!

 
wahsaga
03-06-2010, 21:36 
 
Ich suche eigentlich so etwas wie in php flush();
Nein, suchst du nicht - weil flush dafür da ist, den Ausgabepuffer an den Client zu senden.
Mit JavaScript befindest du dich aber schon auf dem Client, also gibt's da gar nichts zu „flushen“.

ich durchlaufe in Javascript eine Schleife, und in dieser Schleife wird syncron per Ajax (jQuery) eine php-Datei aufgerufen
Weiß der Geier, warum du das synchron machst ...

Dass Schleifen (for/while) „blockieren“, bis sie fertig abgearbeitet sind, ist der Normalfall. So lange ein „Arbeitsschritt“ in JavaScript läuft, wird die Kontrolle nicht an die Rendering-Engine zurück gegeben - so dass Änderungen am HTML/CSS auch nicht umgesetzt werden. (Warum das bei dir im FF/Opera trotzdem funktioniert, ist ohne Kenntnis deines Codes nicht zu sagen.)

Der übliche Weg, um diese Problematik zu umgehen, ist das Ersetzen der Schleife durch wiederholte Aufrufe per setTimeout/setInterval.

 
AmicaNoctis
03-06-2010, 21:50 
 
ist das Ersetzen der Schleife durch wiederholte Aufrufe per setTimeout/setInterval.

… bzw. der asynchrone Weg über den onreadystatechange-Event.


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:09 Uhr.