当前位置: 首页 > 知识库问答 >
问题:

具有多个 ajax 调用的 Jquery 回调

秋和雅
2023-03-14

我有几个函数,我根据ajax调用中的列表填充下拉列表:

function getMissions(defaultId) {
    $.getJSON("Defaults/GetMissions", function (result) {
        var dropDownToFill = $('#change-mission');
        fillUpdateDropDown(dropDownToFill, result);
    });
}
function getSectors(defaultId) {
    $.getJSON("Defaults/GetSectors", function (result) {
        var dropDownToFill = $('#change-sector');
        fillUpdateDropDown(dropDownToFill, result);
    });
}

现在,在下拉列表被填充后,我想选择一个特定的项目,但要获得这个项目,我需要另一个ajax,如:

function getDefaultDetails(defaultId) {
   $.ajax({
        type: "GET",
        url: "/Defaults/GetDefault",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: { defaultId: defaultId },
        success: function (response) {
            //code here to select the items from the response
        },
    });
}

主要功能基本上是:

function main(defaultId){
    getMissions(defaultId);
    getSectors(defaultId);
    getDefaultDetails(defaultId);
}

问题是,在< code>fillUpdateDropDown完成之前,已经到达了< code>getDefaultDetails的< code>success回调(dropdowns可能有很多项)。

我试图理解回调,但在我的情况下,我无法实现我的问题。我试过这样的东西:

 $.when(getMissions(defaultId), getSectors(defaultId)).done(getDefaultDetails(defaultId));

但没有成功。

如何做到这一点?

谢谢。

共有1个答案

司空海荣
2023-03-14

$.when() 需要可转移的对象(Promise、Deferred、Thenable),就像 $.getJSON()返回值一样。

您还必须将对< code>getDefaultDetails()的调用包装在< code >中。匿名函数中的done(),否则您将执行该函数,并且仅对< code >使用其返回值(< code>undefined)。done()

function getMissions(defaultId) {
    return $.getJSON("Defaults/GetMissions", function (result) {
        var dropDownToFill = $('#change-mission');
        fillUpdateDropDown(dropDownToFill, result);
    });
}

function getSectors(defaultId) {
    return $.getJSON("Defaults/GetSectors", function (result) {
        var dropDownToFill = $('#change-sector');
        fillUpdateDropDown(dropDownToFill, result);
    });
}

function getDefaultDetails() { /* ... */ }

$.when(getMissions(defaultId), getSectors(defaultId))
 .done(function() { getDefaultDetails(defaultId) });
 类似资料:
  • 问题内容: 我想在click事件中进行三个Ajax调用。每个ajax调用都会执行不同的操作,并返回最终回调所需的数据。调用本身并不相互依赖,它们可以同时进行,但是当三个都完成时,我希望有一个最终的回调。 问题答案: 这是我写的一个回调对象,您可以设置单个回调以在全部完成后触发,也可以让每个回调都有自己的回调并在全部完成后触发它们: 注意 从jQuery 1.5+开始,您可以按照另一个答案中所述使用

  • 问题内容: 我不太了解jQuery的魔术延迟对象。假设以下代码: 我要执行的操作的顺序是这样的-最后,我将调用四个Web服务,而调用彼此依赖(一个长链): 呼叫 依存呼叫 依存呼叫 调用依赖于和 如您所知2和3可能同时发生。我想我可以使用(或?),我只是不知道如何在这里应用它。我想我需要重新编写功能以始终返回ajax对象? 伪代码如下所示: 问题答案: $ .ajax返回jQuery承诺。然后,您

  • 问题内容: 我希望此函数返回ajax调用是否成功。有什么办法可以做到吗?我下面的代码无法做到这一点。 问题答案: 不幸的是,您不能将值返回给包装异步回调的函数。取而代之的是,您从AJAX请求进行的成功回调会将数据和控制权移交给另一个函数。我在下面演示了这个概念: myFunction的定义: 回调函数定义: 调用myFunction:

  • 问题内容: 我试图在我自己的函数中使用jQuery ajax调用的返回值,但它始终返回未定义的值。 ajax调用绝对有效,因为当我取消注释警报时,我得到了正确的返回,并且可以在firebug中看到它。我在做蠢事吗? 问题答案: AJAX调用是异步的-这意味着AJAX请求是按常规程序执行顺序发出的,并且在您的程序中这意味着不会将数据返回警报。 您不能以这种方式使用调用的返回值,而是将利用AJAX返回

  • 问题内容: 我是使用jQuery处理AJAX的新手,并且已经编写了一个基本脚本来掌握基础知识。当前,我正在将AJAX请求发布到同一文件,并且我希望基于该AJAX调用的结果进行一些其他处理。 这是我的代码: 这是我提交数字“ 2”时得到的答复: 显然,我只对接收和使用数字“ 4”感兴趣,因此我的问题是: 确切指定要返回的数据的最佳方法是什么? 我有一些想法: 将我所有的HTML都包装在if语句中(即

  • 问题内容: 我不太了解如何使用jQuery的ajax函数的回调。 我在JavaScript中有以下代码: 在服务器端(AppEngine / Python),我获取了回调参数的值并使用 但是随后我在浏览器控制台中看到了。 处理此问题的正确方法是什么?现在,我得到了所需的结果,但是我知道这不正确的事实困扰着我。 问题答案: 这就是我在我身上所做的