Javascript 当两个单独的Ajax调用完成时,调用函数的好方法是什么?
因此,我有一些类似于以下简化版本的JS:Javascript 当两个单独的Ajax调用完成时,调用函数的好方法是什么?,javascript,jquery,ajax,Javascript,Jquery,Ajax,因此,我有一些类似于以下简化版本的JS: var MyAjax = $.ajax({ url: 'api/myApi', type: "POST", data: myData, dataType: "json", success: function (data) { if (condition) { var weightCounts = $.ajax({ url: 'api/myApi
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的工作方式而言,我习惯于按部就班,但我正在尝试编写更干净、更面向标准的代码,因此我想知道是否有比上述方法更有利的方法(或者上述方法是否有我没有看到的任何主要缺点)
谢谢您可以使用
你可以用
简短回答:像
async.js
这样的库会有所帮助
详细回答:有几种方法可以解决这个问题
基本上,两个ajax都需要在成功:
上触发相同的回调,比如函数检查\u ajax()
,它检查第一数据和第一数据是否可用。如果是,请调用MyExternalMethod
一个很好的参考:简短回答:像async.js
这样的库会有所帮助
详细回答:有几种方法可以解决这个问题
基本上,两个ajax都需要在成功:
上触发相同的回调,比如函数检查\u ajax()
,它检查第一数据和第一数据是否可用。如果是,请调用MyExternalMethod
一个很好的参考资料:我想你想用这个看起来也很有趣:对不起,我没有用过这些,我只知道它们。我只是想给你指出一个方向,希望我能帮你更多。这个例子正好说明了你的问题。我想你应该用这个看起来也很有趣:对不起,我没有用过这些,我只是知道而已。我只是想给你指出一个方向,希望我能帮你更多。这个例子正好说明了你的问题,真不敢相信我以前不知道。这太棒了。我总是在完整的语句中设置自己的布尔值。这是更优雅的方式。我假设这会和其他语句一起工作,比如$.post和$.get?是的,我相信会的。它适用于任何承诺。一个警告是,如果其中一个承诺被拒绝,那么整个承诺都会被拒绝(失败)。如果你不想有这种行为的话,还有更多的工作要做才能摆脱它。真不敢相信我以前不知道这件事。这太棒了。我总是在完整的语句中设置自己的布尔值。这是更优雅的方式。我假设这会和其他语句一起工作,比如$.post和$.get?是的,我相信会的。它适用于任何承诺。一个警告是,如果其中一个承诺被拒绝,那么整个承诺都会被拒绝(失败)。如果你不想要这种行为,还有更多的工作要做。
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)
});