Javascript 调用ajax函数,然后等待,然后再次调用另一个ajax函数
到目前为止,我做到了:Javascript 调用ajax函数,然后等待,然后再次调用另一个ajax函数,javascript,jquery,ajax,Javascript,Jquery,Ajax,到目前为止,我做到了: $.when(Results.ServiceController.Ajax1(clickedNumber)) .then(Results.UtilFunctions.Wait(5000)) .then(Results.ServiceController.Ajax2(clickedNumber)); 我的Ajax1函数返回ajax对象。我的等待函数如下所示: function (time) { var ret = new $.Deferred(); set
$.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文档:
在将多个延迟对象传递给jQuery.when的情况下,该方法将从新的“master”返回承诺“延迟对象,跟踪已传递的所有延迟的聚合状态。当所有延迟被解决时,该方法将立即解决其主延迟,或者当其中一个延迟被拒绝时,该方法将立即拒绝该主延迟。如果已解析主延迟,则会将传递给jQuery.when的所有延迟的解析值传递给它。例如,当延迟是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
));
相反。默认情况下,Ajax函数是异步的 解决方案1是:生成同步函数。与jQuery类似:
$.ajax(
url: ".../foo",
async: false
)
$.ajax(
url: ".../bar",
async: false
)
$.ajax(
url: "...",
success: function (data) {
anotherAjaxFunction()
}
)
解决方案2是:在第一个函数调用的成功回调中执行第二个ajax函数调用。与jQuery类似:
$.ajax(
url: ".../foo",
async: false
)
$.ajax(
url: ".../bar",
async: false
)
$.ajax(
url: "...",
success: function (data) {
anotherAjaxFunction()
}
)
不知道为什么它对你不起作用
函数等待(时间){
var ret=new$.Deferred();
setTimeout(函数(){
ret.resolve(“在“+时间内解决”);
},时间);
返回ret;
}
函数ajaxCallOnWait(){
$.each(参数、函数(索引、res){
$('ul')。追加(''+res+' ');
});
}
var promise=$.when(wait(1000)、wait(5000)、wait(2000));
承诺。然后(ajaxCallOnWait);
它总共等待了8秒,
$。当
返回一个延迟时,我只需在这个延迟上执行一个then,然后调用另一个函数。这可以是ajax调用,也可以是一个简单的追加,就像我的示例中一样。您想过让ajax请求同步吗?尝试为您的ajax调用创建async=false
。为什么?来自jQuery文档看起来我不必这么做。我只在第二个函数-等待函数返回承诺后才返回ajax(即我从第一个函数返回承诺-Ajax1函数),第三个函数Ajax2应该执行。我想让我的等待函数更“通用”“。无论如何,我现在将尝试这样做。我希望将组织函数顺序的代码放在单独的函数中。那时我正在尝试使用jQuery。它应该能工作,但不能。