【问题标题】:Multiple asynchronous Ajax calls inside each loop in JqueryJquery中每个循环内的多个异步Ajax调用
【发布时间】:2014-11-12 17:21:15
【问题描述】:

我想在一个循环中调用多个 API(例如:$.each)。我可以使用async:false 模式执行此操作,但它会使脚本滞后。如何在同步模式下实现这一点?忽略async 选项只会使list 中的最后一个元素被发送到api 调用。

$.each(lists, function(index, value) {

            channel = lists[index].channel;
            list = lists[index].list;

            $.ajax({
                url : 'api.php?list=' + list + '&from=' + from + '&to=' + to,
                dataType : 'json',
                async : false,
                success : function(data) {
                    obj = data;

                    $.ajax({
                        url : 'api.php?list=' + list + '&from=' + from + '&to=' + to + '&action=sender',
                        dataType : 'json',
                        async : false,
                        success : function(data) {

                            obj['senders'] = data.msg;
                            CommonContainer.inlineClient.publish(channel, obj);

                        }
                    });

                }
            });

        });

【问题讨论】:

  • 你的意思是只发送最后一个发送到 api 调用?查看 _.after 可能有用,您可以创建一个函数,该函数将在调用 X 次后运行。如果我进行 5 次 AJAX 调用并希望在它们都成功的情况下运行某些东西,我会使用它。 - 如果你想要一个例子,让我知道,我可以一起做一个
  • 我不同意这个副本。这里的问题是声明错误使闭包无法保护变量。

标签: ajax jquery asynchronous


【解决方案1】:

这是因为channellist 是全局的(或声明超出了传递给$.each 的函数的范围),因此不受闭包的保护。

使用这个:

  var channel = lists[index].channel;
  var list = lists[index].list;

您还应该将obj 声明为

  var obj = ...

【讨论】:

    猜你喜欢
    • 2011-03-15
    • 2018-07-09
    • 1970-01-01
    • 2016-07-21
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多