我使用$ .ajax從服務器(geoserver)檢索一系列數據。Ajax循環和響應順序
(簡化)的要求是這樣的:
var dataList=[];
//var urllist= // a list of several URLs to request data from
$.each(urllist,function(i) {
$.ajax({
jsonpCallback: 'getJson',
type: 'GET',
url: urllist[i],
dataType: 'jsonp',
success: function(data) {
dataList[i]=data.value;
}
})
});
我需要寫的全局變量dataList
,因爲我需要火後從urllist所有請求完成的事件。 (我有推遲實施像so)。
問題是完成的列表總是以不同的順序。我需要的結果與請求的順序相同。
這可能是一個封閉的問題,其中傳遞給ajax函數的索引i
以及發生在稍後時間點(每個循環移動時)的分配爲dataList
。 我試圖照顧像this,但問題依然如此。另外$.each
像上面的代碼應該爲每個迭代創建一個單獨的閉包。
我設法實現了一個recursive function但它的同步。
編輯:suggested duplicate不與環形阿賈克斯處理請求
可能重複[如何返回來自異步調用的響應?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call ) – Liam
*「這可能是一個關閉的問題,在索引...」*沒有*「我有推遲執行像」*呃......不,你不?你錯過了$ .when和返回。和延遲數組。 –
我添加了一個帶有建議的答案,但現在我仔細閱讀了您想在所有請求都完成時觸發事件並且它不正確,因此我將其刪除。 – mrlew