如何让一个函数等到所有jQueryAjax请求都在另一个函数中完成
简而言之,我需要等待所有Ajax请求完成,然后再执行下一个请求。但是怎么做呢
jQuery现在为此定义了一个when函数
它接受任意数量的延迟对象作为参数,并在所有延迟对象解析时执行函数
这意味着,如果您想启动(例如)四个ajax请求,然后在它们完成时执行一个操作,您可以执行如下操作:
$.when(ajax1()、ajax2()、ajax3()、ajax4()).done(函数(a1、a2、a3、a4){
//这里的代码将在所有四个ajax请求解析时执行。
//a1、a2、a3和a4是包含响应文本的长度为3的列表,
//status和jqXHR对象分别用于四个ajax调用中的每个调用。
});
函数ajax1(){
//注意:此函数必须返回值
//从调用$.ajax()方法开始。
返回$.ajax({
url:“someUrl”,
数据类型:“json”,
数据:yourJsonData,
...
});
}
在我看来,它提供了一个干净清晰的语法,并避免了涉及任何全局变量,如ajaxStart和ajaxStop,这可能会在页面开发过程中产生不必要的副作用
如果您事先不知道需要等待多少ajax参数(即,您希望使用数量可变的参数),那么仍然可以这样做,但这只是有点棘手。请参阅将延迟数组传递给$.when()(可能还有jQuery.when,当使用变量数进行故障排除时)
如果需要更深入地控制ajax脚本等的故障模式,可以保存.when()返回的对象-它是一个包含所有原始ajax查询的jQuery Promise对象。您可以对其调用.then()或.fail(),以添加详细的成功/失败处理程序