到目前为止,我做到了:
$.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.when的情况下,该方法从新的“主” Deferred对象返回Promise,该对象跟踪已传递的所有Deferred的汇总状态。该方法将其主Deferred解析为一旦所有Deferred解析,或拒绝其中一个Deferred,则立即拒绝主Deferred。如果主Deferred被解析,则将传递给jQuery.when的所有Deferred的解析值传递给您,例如,当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
));
代替。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句