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.
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.
Falsch und falsch. Benutze keine Timer, verknüpfe sie nicht. Schau dir jQuery Deferred an / wann, es hat alles was du brauchst.
%Vor% Verwenden Sie setInterval()
function anstelle von while()
.
Tags und Links javascript jquery dom ajax append