2013-10-27 21 views
22

jQuery http://api.jquery.com/jQuery.when/'dan ertelenmiş deseni kullanarak, birden çok jsonp ajax araması yapmaya çalışıyorum ve bir sonraki adıma geçmeden önce sonuçları bekleyin. Bunu sabit bir miktarda arama yaparak yapabilirim çünkü çözülmüş argüman parametrelerinin sayısını ".done()" ertelenmiş nesnesine ayarlayabilirim. Ama benim uygulamada çalışmıyor çünkü arama sayısı dinamik ve her zaman bilinmemektedir.Dinamik çoklu Ertelenmiş jQuery Ajax çağrıları

İlk basitleştirilmiş örnek, .done() çözümlenen işlevindeki hata sayısını ayarlayabildiğim için çalışır.

var urls = GetUrlList(); // returns array of urls to json service 
var requests = []; // hold ajax request 
for (i = 0; i < urls.length; i++) { 
    requests.push($.ajax(url[i])); 
} 

$.when.apply($, requests).done(function ("what goes here?") { 
    // Need to get the data returned from all ajax calls here 
}); 

Teşekkür herhangi bir yardım için tarih:

$.when($.ajax(url1), $.ajax(url2)).done(function(a1, a2) { 
    var data = a1[ 0 ] + a2[ 0 ]; 
}); 

bu eksikti ama işe alınamıyor ne: Ben .her iki aramalar() vardır çünkü iki gerekiyor biliyorum bu!

cevap

30

Sen nesne bir işleve çalışır

$.when.apply($, requests).done(function() { 
    console.log(arguments); //it is an array like object which can be looped 
    var total = 0; 
    $.each(arguments, function (i, data) { 
     console.log(data); //data is the value returned by each of the ajax requests 

     total += data[0]; //if the result of the ajax request is a int value then 
    }); 

    console.log(total) 
}); 
+0

Teşekkür geçti bütün argümanları tutan özel bir kraldır arguments, kullanabilirsiniz! –

+0

Bu, gönderilecek en az iki isteğiniz olduğunda iyi çalışır. Aksi halde, bir sorgu ya da birkaç olduğunda tutarsız bir davranış elde edersiniz :( – Happynoff

+0

argümanların bağlantısı güncel değil ve kullanımdan kaldırılmış bir özelliğe işaret eder. [Güncelleştirilmiş bağlantı budur] (https://developer.mozilla.org/en- US/docs/Web/JavaScript/Reference/Functions/arguments) – Liam