到目前为止我这样做了:
$.when(Results.ServiceController.Ajax1(clickedNumber))
.then(Results.UtilFunctions.Wait(5000))
.then(Results.ServiceController.Ajax2(clickedNumber));
我的 Ajax1 函数返回 ajax 对象。我的等待函数如下所示:
function (time) {
var ret = new $.Deferred();
setTimeout(function () {
ret.resolve();
}, time);
return ret;
}
问题是第二个ajax请求函数(Ajax2)没有等待Wait函数! 编辑: 我也尝试过:
$.when(Results.ServiceController.Ajax1(clickedNumber),Results.UtilFunctions.Wait(5000))
.then(Results.ServiceController.Ajax2(clickedNumber));
一切都没有改变。 来自 jQuery 文档:
“在将多个 Deferred 对象传递给 jQuery 的情况下,该方法从新的“主”Deferred 对象返回 Promise,该对象跟踪已传递的所有 Deferred 的聚合状态。该方法将解析其一旦所有 Deferreds 解析,就主控 Deferred,或者一旦其中一个 Deferreds 被拒绝,就拒绝主控 Deferred。如果主控 Deferred 被解析,则将传递给 jQuery.when 的所有 Deferreds 的解析值传递给它。例如,当 Deferreds 是 jQuery.ajax() 请求时,参数将是请求的 jqXHR 对象,按照参数列表中给出的顺序排列。”
最佳答案
setTimeout(...)
始终立即返回,并且作为第一个参数传递的函数将在超时到期后执行。
你应该这样做:
function (f, arg, time) {
setTimeout(function () {
f(arg);
}, time);
}
$.when(Results.ServiceController.Ajax1(clickedNumber))
.then(Results.UtilFunctions.Wait(
Results.ServiceController.Ajax2, clickedNumber, 5000
));
相反。
关于javascript - 调用ajax函数,然后等待,然后再次调用另一个ajax函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22684921/