Jquery中每个循环内的多个异步Ajax调用

时间:2013-01-08 08:18:38

标签: ajax jquery asynchronous

我想在循环中调用多个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);

                        }
                    });

                }
            });

        });

1 个答案:

答案 0 :(得分:5)

那是因为channellist是全局的(或者是传递给$.each的函数范围之外的声明),因此不受闭包的保护。

使用此:

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

您还应将obj声明为

  var obj = ...