4

我想在一个循环中调用多个 API(例如:$.each)。我可以用async:falsemode 做到这一点,但它会使脚本滞后。如何在同步模式下实现这一点?只是忽略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);

                        }
                    });

                }
            });

        });
4

1 回答 1

5

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

用这个 :

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

您还应该声明obj

  var obj = ...
于 2013-01-08T08:31:28.393 回答