While-Schleife mit jQuery async AJAX ruft auf

8

Die Sache: Ich habe eine Seite, die eine unbestimmte Anzahl von Bildern anzeigen muss, die durch AJAX (mit Base64-Codierung auf der Serverseite) nacheinander geladen werden.

%Vor%

Das Problem besteht darin, dass Bilder (die mit der Funktion renderImageData () erstellt wurden) nur dann an den bestimmten DIV angehängt werden, wenn alle Bilder abgerufen wurden. Ich meine, es ist keine DOM-Manipulation möglich, bis die Schleife beendet ist.

Ich muss Bilder laden und anzeigen, weil die Anzahl der Bilder sehr groß ist. Daher kann ich sie nicht stapeln, bis alle abgerufen sind.

    
Aleksandr Shumilov 12.10.2013, 08:12
quelle

3 Antworten

21

Am besten würdest du deinen Code so umstrukturieren, dass er asynchrone Ajax-Anrufe verwendet und den nächsten Anruf startet, sobald der erste abgeschlossen ist. Dadurch kann die Seite zwischen Bildabrufen erneut angezeigt werden.

Dies wird auch dem Browser eine Chance geben zu atmen und kümmert sich um seine andere Hauswirtschaft und nicht zu denken, dass es vielleicht eingesperrt oder aufgehängt ist.

Und, async: 'false' ist eine schlechte Idee. Ich sehe keinen Grund, warum richtig strukturierter Code asynchrone Ajax-Aufrufe hier nicht verwenden kann und den Browser nicht hängen, während Sie diese Daten abrufen.

Sie könnten es mit asynchronem Ajax wie folgt machen:

%Vor%

Auch wenn dies wie eine Rekursion aussieht, ist es wegen der asynchronen Natur des Ajax-Aufrufs keine Rekursion. getNextImage() ist tatsächlich abgeschlossen, bevor der nächste aufgerufen wird, also handelt es sich nicht um eine technische Rekursion.

    
jfriend00 12.10.2013, 08:16
quelle
-2

Falsch und falsch. Benutze keine Timer, verknüpfe sie nicht. Schau dir jQuery Deferred an / wann, es hat alles was du brauchst.

%Vor%     
Chris Caviness 26.08.2014 02:23
quelle
-3

Verwenden Sie setInterval() function anstelle von while() .

%Vor%     
Optimus Prime 12.10.2013 08:17
quelle

Tags und Links