我有一个for循环,我正在进行Ajax调用,它会给出一些响应
for (var i in my_array)
{
ajax_call()
}
我正在触发多个Ajax请求,有时Ajax响应不是Ajax请求的顺序。我希望得到的回应与请求相同。
有没有办法实现这一点,而不会给应用程序增加任何延迟?
答案 0 :(得分:2)
您可以使用递归函数代替循环:
function sendAjax(myArray, index) {
$.ajax({
url: '/someurl',
type: 'POST',
data: { id: myArray[index].id },
success: function(result) {
// TODO: do something with the result of the AJAX call
if (index < myArray.length) {
// proceed with the next call if we still have
// elements in the array to process
sendAjax(myArray, index++);
}
}
});
}
然后触发:
sendAjax(my_array, 0);
这样可以保证响应的到达时间与请求的顺序相同,因为在第一次完成之前没有其他请求。
这就是说,发送这样的多个AJAX请求并不是一个好主意。您应该尽可能地限制网络连接。最好发送一个包含所有数组数据的大型AJAX请求,而不是为数组的每个元素发送多个较小的AJAX请求。
答案 1 :(得分:0)
如果你使用jQuery ajax,你可以使用async。这样JavaScript就会“停止”,直到完成AJAX调用。
$.ajax({
url: "test.html",
context: document.body,
async: false,
success: function(){
// do something here
}
});