Wie kann ich call ajax synchron ohne meine web-Seite einfrieren
Ich habe einige javascript-Code, feuert aus etwa 100 Anrufe an ein php-Skript. das php-script verbraucht sehr viel Speicher und dauert ein paar Sekunden, und gibt dann eine json-Antwort von pass oder fail.
Ich nicht wollen, dass die ajax-Aufrufe werden asynchron als würde der server kommen zum erliegen laufen 100 Instanzen von sich selbst, also versuchte ich mit synchron -, das einzige problem, dass es einfriert, die Webseite, während es ruft das script einen Anruf gleichzeitig annehmen.
Wie kann ich Feuer aus dem ajax-Aufrufe nacheinander und nicht einfrieren, der Seite, die ich bin?
var a = [];
a[0] = 'test';
a[1] = 'hello';
a[2] = 'another';
$(document).ready(function(){
$.each(a, function(k,v) {
$.ajax({
url:'/this-script-takes-a-few-seconds-to-complete.php',
async:false,
data: {foo: v},
success: function(data){
console.log(data);
}
});
});
});
- ...was in aller Welt machst du, das muss 100 ajax-requests?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie in einer Funktion führt, dass der nächste Anruf, und rufen Sie diese aus Ihrer
success
handler, wie diese:Obwohl...der bessere Ansatz wäre, nicht zu 100 Anrufe, es sei denn, dies ist eine test-suite für paar-Art, würde ich wieder besuchen der ganze Ansatz.
Wenn Sie nicht möchten, dass Ihr Aufruf asynchron, dann kann der browser nicht aktualisieren der Benutzeroberfläche, die frieren wird. Warum kann man nicht machen, async? Anstatt das zu tun, alle 100 auf einmal, nur warten, für eine vollständige und rufen Sie dann die nächste ein.
Müssen Sie umgestalten, dieses Ding. 100 ajax-Anfragen ist verrückt, und alle von Ihnen synchrone als auch.
Schlage ich vor, Sie überarbeiten Sie Ihre app, so dass Sie analysieren können, alle diese Daten aus und senden Sie es in einem asynchronen gehen, oder ein paar asynchrone requests, nicht 100.
Wenn Sie brauchen 100, eine Art von Warteschlange und asynchron verarbeiten Sie in Ordnung.
Naja das problem ist, dass Ajax... steht für "Asynchronous JavaScript and XML"...
Versuchen zu tun, Ajax synchron Niederlagen der Zweck der Verwendung von Ajax in den ersten Platz.
Versuchen Sie es mit einem thread-pool und es läuft async.
Bearbeiten - Richtige Antwort
Meisten Browser beschränken die Anzahl der HTTP-Anfragen auf einem einzigen server, vermutlich um zu verhindern, dass Situationen, die genau wie Sie versuchen, zu verhindern (server-überlastung). Ich bin mir nicht sicher, was die tatsächlichen zahlen sind für moderne Browser, aber ich vermute, es ist mehr, als die alte "2", die ich beobachtet habe in Firefox in 2005.
Einige Ressourcen:
about:config
, und suchen Sie nachmax-connections-per-server
Alte Antwort
Dieses Skript ruft eine synchrone
$.ajax
alle 2 Sekunden, jedes mal, wenn die Verlagerung der Daten aus der arraya
. Die UI wird immer noch Sperre während der Zeit, jede Anfrage wird ausgeführt, aber ermöglicht es, sich selbst zu aktualisieren zwischen den anrufen. Ich denke, das ist ein ziemlich guter Kompromiss zwischen völlig synchron und völlig asynchron.Beachten Sie, dass dieses Skript ist destruktiv -
a
wird leer sein, wenn es fertig ist. Wenn Sie den Inhalta
, dann möchten Sie vielleicht, um eine Kopie erstellen.Ich hatte ähnliches Problem, wo ich brauchte, um Anruf synchron und IE war das einfrieren aus.Kurz gesagt, ich kam mit diesem Ansatz.
Es mir erlaubt zu nennen, ein synchronious nennen aysnchroniously, also rief ich, nachdem der Vorherige Aufruf.