4

ループ内で複数のAPIを呼び出したい(例:$。each)。これはasync:falseモードで実行できますが、スクリプトが遅れます。同期モードでこれを実現するにはどうすればよいですか?オプションを無視asyncするだけで、最後の要素のみがlistAPI呼び出しに送信されます。

$.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

これは、channellistがグローバルである(または渡される関数のスコープ外で宣言されている$.each)ため、クロージャーによって保護されていないためです。

これを使って :

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

objまた、次のように宣言する必要があります

  var obj = ...
于 2013-01-08T08:31:28.393 に答える