javascript - 在 jQuery AJAX 中使用异步选项

标签 javascript jquery ajax asynchronous

我对 jQuery 中的 AJAX 调用有疑问
这就是我要解决的问题:

  1. 调用服务器获取代码列表
  2. 对于每个代码,再次调用服务器以获取客户列表
  3. 显示结果

我有一个像这样的代码片段(它几乎是伪代码;只是想提及感兴趣的部分):

$('button#myButton').click(function() {
    var codes = [];
    var customers = [];

    $.ajax({
        // URL etc. Properties,
        async: false
    }).done(function(codes) {
        // Update the values in the 'codes'  array to be used later
    });

    // Use the 'codes' array to get the customers for each code
    //    and populate the 'customers' array
    $(codes).each(function() {
        $.ajax({
            // URL etc. Properties,
            async: false
        }).done(function(customers) {
            // Populate the 'customers' array
        });        
    });

    // Display the results (using both arrays) in a 'div'
});  

现在,这是我的问题:
起初,我想使用 2 个嵌套的 getJSON 调用来完成此操作,但无论我如何努力,我都无法使其工作(第二个调用等待第一个调用完全完成,并且然后开始通话)

然后,在这里搜索,我看到有人建议将 async 函数设置为 false ,现在看来,调用的行为顺序与代码

我唯一不明白的是,我收到了有关主线程上的同步 XMLHttpRequest 已弃用的警告,并且在 jQuery 的网站中,提到使用 success/error/Complete 方法,但如果我禁用 async,那么调用的顺序就会困惑(至少我无法理解顺序),当我到达第二个调用时,我的codes 数组是空的,所以没有什么可做的!

感谢任何帮助,因为我花了一整个上午的时间试图让它发挥作用!

PS:正如我所说,代码正在运行,我只是对正确的方法感兴趣

更新

谢谢大家的回答。也许如果我提到我应该如何显示结果,它会让事情变得更清楚
我试图在表格中显示结果,其中包含“代码”、“费率”和“客户”

当我完成第一个 AJAX 调用时,我获得了前两列的值,因此我可以添加相应的 tr(和 td) ),但是当我到达第二个 AJAX 调用时,我必须遍历每个代码以获取每个代码的“客户”(从服务器)

如果我将所有逻辑放入第二个 AJAX 调用的 complete 方法中,我将拥有没有第三列的所有行,因此我需要以某种方式将客户添加到最后一个 td 每行,我不知道怎么办!!!

最佳答案

这些调用(或者至少应该)按照它们在代码中的顺序运行。但是,如果您删除 async: false,您将永远无法提前知道哪个先完成。
这就是为什么您应该使用回调方法。
就我个人而言,我会删除async: false并从第一个ajax的success函数中调用第二个ajax。

关于javascript - 在 jQuery AJAX 中使用异步选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35526983/

相关文章:

javascript - 使用 java 脚本或 j 查询检测选项卡关闭事件并进行用户授权的 google api 调用

javascript - 涡轮链接 5 : Add external javascript file from other site in a specific page

jquery - 正则表达式未按预期工作

javascript - 隐形 reCaptcha AJAX 调用

javascript - PHP数据在AJAX中成功吗?

javascript - 在使用 Ajax 时,我仍然无法使我的回调正常工作。它似乎没有在等待回调,我做错了什么?

javascript - 如何在 IIFE 中包装构造函数并将实例放置在 Window 对象上?

javascript - 如何使用CKeditor允许所有html标签和属性?

jquery - 从两侧(向上和向下)展开 div

jQuery 加载动态元素