在我的插件中,我想顺序ajax调用和响应,因为下一个响应取决于前一个。 不幸的是,响应与调用顺序不匹配(我不想使用async:false),所以我应该处理这个问题。
var array = ['a', 'b', 'c', ...]; <- dynamic values
var params = ['foo', 'bar', 'doe', ...]; <- dynamic values
var postData = {};
$.each ( array, function ( idx, val ) {
postData.value = val;
var param = params[idx];
ajaxRequest( param, callback );
});
var ajaxRequest = function ( param, callback ) {
$.ajax ({
url: url,
data: postData,
type: "POST"
}).done ( function ( data ) {
//a returned data in 5 sec
//b returned data in 3 sec
//c returned data in 1 sec
});
}
我已经阅读了一些有关ajax承诺和推迟的内容,但我不知道IF以及它如何能够成为我的场景的正确解决方案
我怎么能这样做?
谢谢
答案 0 :(得分:1)
你可以使用&#34;完成&#34; ajax请求的功能,以确保请求按顺序链接在一起,因为在请求成功完成之前,此回调不会执行。这样的事情(未经测试):
var arr = ['a', 'b', 'c', ...];
var params = ['foo', 'bar', 'doe', ...];
var arrIndex = 0;
function ajaxRequest() {
console.log("Request " + arrIndex + " starting");
var postData = { value: arr[arrIndex] };
var param = params[arrIndex];
$.ajax ({
url: url,
data: postData,
type: "POST"
}).done ( function ( data ) {
console.log("Request " + arrIndex + " completed");
arrIndex++;
if (arrIndex < arr.length) {
ajaxRequest();
}
else {
console.log("All requests completed");
}
});
}
我不确定&#34; param&#34;的目的是什么?是的,因为你似乎没有在这个例子中使用它,但我已经把它留在了,以防万一你真的需要它。 &#34;回调&#34;似乎什么都不做,所以我忽略了这一点。
如果任何特定请求失败,您可能还想考虑该怎么做 - 我假设您无法继续,所以也许您只需记录错误,但我会留给您。< / p>