2016-07-20 6 views
0

Ich versuche zuMehrere verzögerte AJAX-Antworten abgeschlossen, aber auch die Iterationsvariable?

  • Aggregate Ergebnisse aus mehreren $.get Anfragen
  • Legen Sie eine Zeichenfolge basierend auf dem Zähler in der for Schleife für jede Anforderung fehlschlägt

Der zweite Teil, weil ich das glauben mehrere verzögerte Anforderungen bedeutet, wenn sie ausgeführt werden, ist die for-Schleife bereits abgeschlossen.

Gibt es eine Möglichkeit, die Variable zu übergeben, so dass die Get-Anfrage auch weiß, welcher Wert von i es ist?

var requests = []; 
    var strings = ["Hi1","Hi2","Hi3","Hi4"] 
    var total; 
    for (i = 0; i < 4; i++) { 
     requests.push($.get('http://....', function(response) { 
      // i here is always 4. 
      console.log(i); 
      total += response + strings[i]; 
     }); 
    } 

    $.when.apply(null,requests).then(function() { 
     // This works, but all of the strings have "Hi4". 
     console.log(total); 
    }); 

Antwort

0

Wenn Sie nur für jede Antwort der Zähler benötigen zu erhöhen, können Sie tun, dass im Rahmen des Rückruf statt in der for Schleife, so dass er wie jeder Aufruf zurückkehrt erhöht wird:

var requests = []; 
var strings = ["Hi1","Hi2","Hi3","Hi4"] 
var total; 
var counter = 0; 
for (i = 0; i < 4; i++) { 
    requests.push($.get('http://....', function(response) { 
     total += response + strings[counter++]; 
    }); 
} 

... Beachten Sie jedoch, dass asynchrone Antworten nicht in der Reihenfolge zurückgegeben werden, in der Sie sie gesendet haben. Wenn jeder Zählerwert einer bestimmten Anforderung entsprechen muss, ist es möglicherweise besser, jeden Aufruf separat mit diesem bestimmten Wert zu behandeln (oder den Zählerwert möglicherweise an den Server weiterzuleiten, damit Sie ihn als Teil der Antwort lesen können.)

Verwandte Themen