javascript - 调用ajax函数,然后等待,然后再次调用另一个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();
    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/

相关文章:

javascript - 单击 HTML 页面中的 "button"会将用户定向到另一个 HTML 页面,并在该页面中使用 jQuery 显示 "hidden div"

javascript - 绑定(bind)两个输入,以便即使其中之一被用户更改,它们也会显示相同的文本

javascript - 如何使表单动态自动完成

javascript - Json Ajax 和 Javascript

ajax - Grails:来自Ajax调用的数据未显示在Controller的params变量中

javascript - html 使用 javascript 为输入文本赋值不起作用

javascript - 文本字段中的正则表达式

javascript - 在 underscore.js 中按键排序

css - 我如何使用 jquery 在 ajax 响应上应用完整的 css

javascript - AJAX 页面转换后 Woocommerce 功能被禁止