所以我有一些类似于以下简化版本的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()
的args是由这些调用生成的,因此它们都需要完成。
从概念上讲,这些调用完全是彼此独立的,并且条件调用不需要等待初始调用的成功事件,这只是编写此代码时我能想到的最佳方法。 。我想重构这个来修复等待执行条件的第一个请求的缓慢,但我不确定最好的方法。
到目前为止,我最好的想法是:
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工作而言,我习惯于在裤子的座位上飞行,但我正在尝试编写更清晰,更标准的代码,所以我想知道是否有比上述更有利的方法(或者以上是否有任何我没有看到的主要缺点。
由于
答案 0 :(得分:4)
您可以使用$.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)
});
答案 1 :(得分:0)
简短回答:像async.js
这样的图书馆会有所帮助。
答案很长:有几种方法可以解决这个问题。
基本上两个ajax都需要在function check_ajax()
上触发相同的回调说success:
,这会检查firstData
和firstData
是否可用。如果是,请致电MyExternalMethod
。