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

cod*_*er9 4 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);

                        }
                    });

                }
            });

        });
Run Code Online (Sandbox Code Playgroud)

Den*_*ret 5

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

用这个 :

  var channel = lists[index].channel;
  var list = lists[index].list;
Run Code Online (Sandbox Code Playgroud)

你也应该声明obj

  var obj = ...
Run Code Online (Sandbox Code Playgroud)