使用 jquery deferreds 处理可变数量的 ajax 请求

2024-04-27

当我有可变数量的 ajax 请求时,如何使用 deferreds 调用它们?

我猜:

//qty_of_gets = 3;

function getHTML(productID, qty_of_gets){

    var dfd = $.Deferred(),
            i = 0,
            c = 0;

    //this is where there could be some magic to 
    //do multiple ajax posts
    //obviously I'm out of my depth here...
    while (i <= qty_of_gets){

        dfd.pipe(function(){
            $.get("queries/html/" + product_id + i + ".php");
        });                       
    i++
    }
    dfd.done(function(){

        while (c <= qty_of_gets){
           $('myDiv').append(c);
           c++;
        }

    });
}

如果要顺序执行 Ajax 调用,则必须从回调返回 Promise,并将新的回调附加到最后一个 Promise 对象:

var dfd = $.Deferred(),
   promise = dfd.promise(),
   i = 0,
   c = 0;

while (i <= qty_of_gets) {
    // needs an IIFE
    (function(i)
        promise = promise.then(function(){
            return $.get("queries/html/" + product_id + i + ".php");
        });
    }(i++));                       

}

promise.done(function(){

    while (c <= qty_of_gets){
       $('myDiv').append(c);
       c++;
    }

});

// resolve deferred
dfd.resolve();

从 jQuery 1.8 开始,你应该使用.then代替.pipe.

另一个问题是(至少在您的示例中)在执行回调时,i不会有你期望的价值。您可以使用立即调用函数表达式捕获当前值i. See 循环内的 JavaScript 闭包 – 简单的实际示例 https://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example了解更多信息。


没有干净的解决方案来获得结果。我认为你能做的最好的事情就是将结果添加到一个数组中并在.done打回来。 IE。:

var results = [];

while (i <= qty_of_gets) {
    // needs an IIFE
    (function(i)
        promise = promise.then(function(){
            return $.get("queries/html/" + product_id + i + ".php")
                     .then(function(result) {
                       results[i] = result;
                     });
        });
    }(i++));                       

}

promise.done(function(){
    // do something with `results`
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 jquery deferreds 处理可变数量的 ajax 请求 的相关文章

随机推荐

  • Git:用一个命令推送到两个存储库

    我想要做git push origin and git push my other remote在同一条线上 可能的 您可以通过为您的应用添加额外的推送 URL 来获得相同的效果origin偏僻的 例如 如果现有遥控器的 URL 如下 gi
  • PyQt5:如何将 QPushButton 连接到插槽?

    好吧 几乎所有教程 可理解的用人类语言编写的文档都是针对 PyQt4 的 但是 PyQt5 改变了整个 将按钮连接到插槽 的工作方式 但我仍然不知道如何做到这一点 我在 QtDesigner 中做了一个快速 gui 并且有一个 QPushB
  • PhantomJS page.open 冻结

    我正在尝试使用 Capture 示例使用 PhantomJS 打开网站 var page require webpage create page open http github com function page render githu
  • 在后台播放音乐:AVAudioSessionInterruptionNotification 未触发

    我的应用程序正在播放背景很好 Pause and play即使我的应用程序是后台使用注册的方法也运行良好AVAudioSessionInterruptionNotification 问题到达场景的步骤 启动我的应用程序 gt 我的应用程序中
  • 生成易于记忆的随机标识符

    与所有开发人员一样 我们在日常工作中不断处理某种标识符 大多数时候 它与错误或支持票有关 我们的软件在检测到错误后 会创建一个包 该包的名称由时间戳和版本号格式化 这是创建合理唯一标识符以避免混淆包的一种廉价方法 例子 错误报告 20101
  • 为什么无法在 android 中包含 iostream?

    已安装 android ndk r7 并尝试编译 cpp 文件 include
  • 如何从 API 获取雅虎天气背景?

    我有一个天气小部件 我需要动态背景 雅虎有天气 API 但我无法找到与天气类型相关的背景图像 https weather yahoo com https weather yahoo com 这可能吗 var url http query y
  • 如何使用计划库运行异步函数?

    我正在使用discord py rewrite 编写一个discord 机器人 并且我想每天在特定时间运行一个函数 我对异步函数完全没有经验 而且我无法弄清楚如何在不使用 await 的情况下运行异步函数 这只是我的一段代码 这就是为什么有
  • 线程忙等待

    基本上 我需要忙着等待一些 html 出现在网页上 我创建了以下代码来忙等我 public void ExecuteBusyWaitThreads foreach Canidate canidate in allCanidates Thre
  • (Flutter) HTTPClient 参数无效:URI 中未指定主机

    目前正在开发一个小应用程序 允许用户查看存储在 Heroku 上的数据库 但是在使用数据库的 URL herokuapp com api 时 我遇到了上述问题 var client createHttpClient var response
  • Grails:如何更改默认视图位置?

    我有控制器AdminTagController 默认情况下视图将位于 adminTag文件夹 是否可以将此控制器的默认文件夹更改为 admin view 我可以为每个方法指定视图 但这并不酷 谢谢 可以用以下命令更改它拦截器后 http g
  • RSS:刷新率?

    我正在编写一个供自己使用的小应用程序 它将使用公开发布的 RSS 提要 据我所知 该协议中没有订阅 发布机制 我需要让我的应用程序定期通过 HTTP GET 获取 RSS 提要 如果是这样的话 我想每隔十分钟左右就抢一次 但我担心被视为施虐
  • 使用 Process.Start() 启动后等待 WPF 应用程序加载

    我有一个 WinForms 应用程序 它启动一个运行的 wpf 进程Process Start 我想知道 WPF 进程何时完成加载并且我可以访问process MainWindowHandle属性 在完全加载之前其值为 0 我尝试轮询 但句
  • 如何为列表中的项目添加背景颜色

    我有一个有序列表 ol li class odd Lorem ipsum dolor sit amet consectetur li li class even Some more text li ol 看起来像这样 Lorem ipsum
  • C++ 条件变量通知未按预期工作

    我正在尝试在之前的工作完成后立即启动新线程worker thread has started 但也许结束了 也可能没有结束 我已经用时间延迟替换了开始和结束的工作 我的代码是 include
  • jquery ajax - 返回 json 或纯 html 更好

    当时间从ajax返回时 我应该返回 json 编码 并使用 jquery parseJSON 并使用 document createElement 并将数据附加到刚刚创建的元素内 或者最好以 html 文本形式返回 example div
  • 如何使用 C# 从数据库中检索多个图像

    我有一个包含9张图像的数据库 这些图像不断变化 所以我无法直接设置src在 HTML 中 img 标签来显示 9 个图像 我必须从数据库中选择它们并相应地绑定它们 我可以使用以下命令检索并打印 1 张图像Response BinaryWri
  • AVAudioPlayer 不播放声音

    我有一个 WatchKit 应用程序 当点击手表上的按钮时 它会向 iOS 应用程序发出播放声音的信号 由于某种原因 当我使用自定义类来处理设置实例时 声音没有播放AVAudioPlayer并播放声音 如果我在里面做那部分session d
  • 好的 Clojure 代码示例? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在第一次查看 Clojure 我发现查看 Clojure 核心库的 doc xxx 和 sourc
  • 使用 jquery deferreds 处理可变数量的 ajax 请求

    当我有可变数量的 ajax 请求时 如何使用 deferreds 调用它们 我猜 qty of gets 3 function getHTML productID qty of gets var dfd Deferred i 0 c 0 t