Ich habe eine Liste der Sprache, ['en', 'de']
und so weiter, und ich möchte komplexe AJAX-Anfrage für jede Sprache zu nehmen. Bei der ersten Ajax-Anfrage bekomme ich eine Intents-Menge für jede Sprache. Ich muss Phrasen Menge für jede Absicht aus früheren Aufruf zählenOrder of Deferred Jquery Ajax Anfragen
var languages = ['en', 'de', 'es', 'fr', 'it', 'cn'];
intents_dic = [];
chart_quantity = ['quantity'];
for (var x = 0; x < languages.length; x++){
$.ajax({
url: 'url',
type: 'GET',
async: false,
success: function(data){
for (i in data){
intents_dic.push(data[i]['id'])
}
var intents_count = 0;
var deferreds = [];
Und auf der zweiten Stufe. Ich verwende die Deferred List für diese Aufgabe.
for (var id = 0; id < intents_dic.length; id++){
deferreds.push($.ajax({
url: 'url',
type: 'GET',
success: function(data){
intents_count += data['templates'].length;
}
}))
}
$.when.apply(null, deferreds).done(function() {
chart_quantity.push(intents_count);
})
Aber als latente AJAX-Anfragen abgeschlossen sind, unterscheidet sich die Reihenfolge der Fertigstellung mit Sprachliste um (es ist Hauptplan für den Aufbau). Kann dieses Problem behoben werden, oder ist es eine Funktion von Ajax-Anrufen? Vielen Dank.
Ja, es ist ein Merkmal. – Bergi
Verwenden Sie nicht 'async: false'! – Bergi
@Bergi ist es besser, Schließen anstelle von Synchronisierungsanfragen zu verwenden? –