jQuery Ajax:如何等待* async *请求成功完成后再继续?

我在制作ajax快速function性方面遇到了问题。 这是伪/原型代码:

function blah1(arg1){//arg1 is an array, roughly 10 elements var arr[]; $.each(arg1, function(i){ //blah code $.ajax({ //blah options async: true, success: function(data){ arr[i] = data.someInt; }//end success });//end ajax }//end each return arr; }//end function 

基本上,我发送一个ajax并需要返回的数据进行进一步处理。

如果我将async设置为true,则函数会立即返回空的’arr’数组,因此整个脚本都会失败。 但是,如果我将异步设置为false,那么它可以工作,但需要很长时间。

我见过这个$ .ajaxQueue(); 事情,但坦率地说,我根本不理解它,我不知道它是否会奏效。

所以问题是,首先,有没有什么方法可以同时异步发送所有的ajax请求,让函数等待并在所有ajax完成后返回arr []? 如果没有,ajaxQueue会在我的情况下工作吗? (粗略的例子,请?)

使用jQuery 1.5 deferred’s我会选择这个:

 function blah1(arr, callback){ $.when($.map(arr, function(val, i){ $.ajax({ //blah options async: true }); }).toArray()).then(function(resultsArr) { callback(resultsArr); }); } 

问题是你试图在异步ajax调用完成之前返回函数中的数组。 这实际上是不可能的,所以你需要将回调传递给blah。

你在这里做的是将你的对象数组映射到jqXHR对象(它们是延迟对象)。 然后将该延迟对象数组传递给$.when

$.when接受一个数组然后允许你在整个数组从ajax调用完成加载时运行.then函数。 然后,您将一个resultsArr作为参数传递给resultsArr函数。

如果您在ajax成功调用中操作返回值,则无法使用$.ajaxreturn相同的函数。

您可以使Ajax调用同步,您似乎知道,个人我会重新考虑我的代码,因此ajax调用的成功方法,然后触发另一个函数的调用。

 $.ajax({ //blah options async: true, success: function(data){ arr[i] = data.someInt; myCall(arr[i]); }//end success });//end ajax