而不是使用async:false
,您可以創建一個從回調中遞歸調用的函數。
function sendReq(arr) {
var current = arr.shift(); // Remove the first item from the Array.
$.ajax({
url: current.url, // Use the url from the first item.
success: function(dat) {
current.func(dat); // Call the function of the first item.
if(arr.length) // If there are items left in the Array,
sendReq(arr); // make a recursive call, sending
} // the remainder of the array.
});
}
// Ordered collection of requests to be made.
var req_set = [
{url:'someurl', func:function(dat) { /*do something with dat*/ }},
{url:'anotherurl', func:function(dat) { /*do something with dat*/ }},
{url:'someother', func:function(dat) { /*do something with dat*/ }}
];
// Start the first call, sending the entire set.
sendReq(req_set);
所以基本上:
- 製作包含用於請求所需的元素對象的數組。
- 製作一個接受數組的函數。
- 該函數從數組中刪除第一個項目,並使用該對象填充請求屬性。
- 在回調中,在調用該項目的函數之後,對函數進行遞歸調用,傳遞數組的其餘部分。
- 這將繼續遞歸調用,直到Array爲空。