我正在處理多個延期Ajax調用,我想動態地瞭解我如何訪問他們的數據。而不是將幾個參數硬編碼到.then回調函數中並單獨使用每個參數,我想循環訪問參數對象以訪問數據。這工作正常,除非我無法從json確定哪些數據來自哪個Ajax調用。我可以通過確定承諾對象的URL(以某種方式)或者確定Ajax調用執行的順序和假定數據的順序相同來解決此問題。來自多個延遲Ajax調用與他們的來電者配對數據
這裏是我到目前爲止的代碼(嘲笑了爲了說明什麼,我試圖做):
promises = [
$.get("example.php", {}, function(){}),
$.get("list.php", {}, function(){}),
$.get("test.php", {}, function(){}),
]
$.when.apply(null, promises).then(function() {
jsonarray = []
$.each(arguments, function(index, value){
// this is what I would like to work but doesn't
// promises[index].success.url is how I imagine accessing
//"list.php" or "test.php"
if (jsonarray[promises[index].success.url] == null){
jsonarray[promises[index].success.url] = []
}
jsonarray[promises[index].success.url] = value
doSomethingWith(jsonarray)
})
有另一種方式與Ajax調用產生它的每個參數匹配?我不想做的是這樣的:
$.when.apply(null, promises).then(function(examplejson, listjson, testjson) {
// this is lame
exampledoSomethingWith(examplejson)
listdoSomethingWith(listjson)
testdoSomethingWith(testjson)
})
謝謝! 薩拉
我不確定'apply'是如何工作的,但是你不能在你的'promises'數組中添加每個調用的URL嗎?你可能會把你的promises數組轉換成一個對象數組''promises = [{url:「example.php」,fn:$ .get(「example.php」,{},function(){})},.. 。]' – 2012-01-12 15:29:53
我可以做到這一點,但它會讓jquery承諾進入when.apply調用變得複雜。如果你只是做一個直接的Ajax調用,這個承諾是免費返回的。 – saranicole 2012-01-12 15:44:32