当两个单独的Ajax调用完成时,调用函数的好方法是什么?
What is a good way to call a function when two separate Ajax calls complete?
所以我有一些类似于以下简化版本的JS:
var MyAjax = $.ajax({
url: 'api/myApi',
type: "POST",
data: myData,
dataType: "json",
success: function (data) {
if (condition) {
var weightCounts = $.ajax({
url: 'api/myApi',
type: "POST",
data: myConditionalData,
dataType: "json",
success: function (conditionalData) {
MyExternalMethod(data, conditionalData)
}
});
基本上我有两个Ajax调用。我有一个可以检索一些数据,如果启用了额外设置,第二个可以检索一些数据。条件调用嵌套在主调用的成功事件中的原因是因为MyExternalMethod()
的参数是由这些调用生成的,因此它们都需要完成。
到目前为止,我最好的想法是:
var firstData = null;
var secondData = null;
var MyFirstAjax = $.ajax({
url: 'api/myApi',
type: "POST",
data: myData,
dataType: "json",
success: function (data) {
firstData = data;
if (secondData){
MyExternalMethod(firstData, secondData)
}
});
var MySecondAjax = $.ajax({
url: 'api/myApi',
type: "POST",
data: myData,
dataType: "json",
success: function (data) {
secondData = data;
if (firstData){
MyExternalMethod(firstData, secondData)
}
});
除了使用这些变量作为标志之外,还有其他标准的方法吗?我已经习惯了在JS的工作中随心所欲,但我想写更干净,更面向标准的代码,所以我想知道是否有比上面更有利的方法(或者上面有任何我没有看到的主要缺点)。
谢谢
您可以使用$.when()
…
var MyFirstAjax = $.ajax({
url: 'api/myApi',
type: "POST",
data: myData,
dataType: "json"
});
var MySecondAjax = $.ajax({
url: 'api/myApi',
type: "POST",
data: myData,
dataType: "json"
});
$.when(MyFirstAjax, MySecondAjax).then(function (firstResult, secondResult) {
var firstData = firstResult[0];
var secondData = secondResult[0];
MyExternalMethod(firstData, secondData)
});
简短的回答:像async.js
这样的库会有所帮助。
长回答:有几种方法可以处理这个问题。
基本上两个ajax都需要触发相同的回调,比如success:
上的function check_ajax()
,检查firstData
和firstData
是否可用。如果是,调用MyExternalMethod
。
一个很好的参考:http://book.mixu.net/node/ch7.html
相关文章:
- jQuery自动完成,调用函数时出现问题
- 完成ajax调用数组的循环,而不是在某个调用出错时中断
- 当一系列 jquery ajax 调用完成时执行一个函数(!)
- 延迟链接 - 然后在上一个调用完成但出现错误时调用成功回调
- 仅在上一个完成时调用函数
- 在一个或多个函数完成时调用函数
- 当ng-repeat完成时调用javascript函数
- 使用不同的参数多次调用同一函数.完成时:在其他函数中使用每个返回值
- 上一个ajax调用完成时进行多个ajax调用
- 如何限制keypress/keyup/keydown操作并仅在ajax调用完成时执行
- 当多个asyc调用完成时,AJAX启动最后一个asic调用
- AJAX调用未完成时停止执行JS函数
- 当AJAX调用完成时重置Bootstrap加载状态按钮
- Angularjs嵌套的ng-repeat函数在完成时调用
- 当两个单独的Ajax调用完成时,调用函数的好方法是什么?
- 当另一个方法完成时调用该方法
- 我想调用setinterval,当setinterval完成时,改变页面
- 在多个ajax事件完成时调用一个函数
- 在JS中,当循环完成时调用一个函数
- 只有当ajax调用完成时才返回函数中的值