同步Ajax调用

时间:2011-10-14 10:00:46

标签: javascript ajax

我有一个for循环,我正在进行Ajax调用,它会给出一些响应

for (var i in my_array)   
{  
   ajax_call()   
}  

我正在触发多个Ajax请求,有时Ajax响应不是Ajax请求的顺序。我希望得到的回应与请求相同。
有没有办法实现这一点,而不会给应用程序增加任何延迟?

2 个答案:

答案 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
  }
});

doc:http://api.jquery.com/jQuery.ajax/