【发布时间】:2014-05-06 06:25:05
【问题描述】:
到目前为止,我是这样做的:
$.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)没有等待等待函数! 编辑: 我也试过了:
$.when(Results.ServiceController.Ajax1(clickedNumber),Results.UtilFunctions.Wait(5000))
.then(Results.ServiceController.Ajax2(clickedNumber));
什么都没有改变。 来自 jQuery 文档:
"在将多个 Deferred 对象传递给 jQuery.when 的情况下,该方法从一个新的“主” Deferred 对象返回 Promise,该对象跟踪它已传递的所有 Deferred 的聚合状态。该方法将解析其master Deferred 一旦所有的 Deferred 都解决了,或者当其中一个 Deferred 被拒绝时就拒绝 master Deferred。如果 master Deferred 被解决,则将传递给 jQuery.when 的所有 Deferred 的解析值传递给它。例如,当 Deferred 是 jQuery.ajax() 请求时,参数将是请求的 jqXHR 对象,按照它们在参数列表中给出的顺序。"
【问题讨论】:
-
你有没有想过让ajax请求同步?
-
尝试为你的ajax调用制作
async=false。 look @ help -
我为什么要这样做?从 jQuery 文档看来我不必这样做。我正在返回 ajax(也就是说我正在从第一个函数 - Ajax1 函数返回承诺)只有在第二个函数 - 等待函数返回承诺之后,才应该执行第三个函数 Ajax2。
标签: javascript jquery ajax