0
var request3 = 
window.SendAjax(window.siteRoot + "Home/GetTweets", "{}", function(msg) {
    //tweet
    $.each(msg, function(i, value) {
       ...

    });
    console.log("loop done");
});


$.when(request1, request3).then(function () {
  console.log(feedItems);
});

$.when() jQuery メソッドを使用しようとしています。データを取得してからデータでループを実行する 3 つの AJAX メソッドがあります。$.when は、その AJAX 非同期が完了すると実行されます。ループが完了するまで待機する必要があります。すべてのコードを示したわけではありませんが、データを取得してからループを実行する 3 つの AJAX 呼び出しがあります。3つすべてが完了したら、何かをします。考え?

4

3 に答える 3

2

私はSendAjax()次のように見えると思います:

function SendAjax(url, data, callback) {
    return $.ajax({
        ...
        success: callback,
        ...
    });
}

その場合は、次のように変更します。

function SendAjax(url, data, callback) {
    var def = $.Deferred();
    return $.ajax({
        ...
        success: function() {
            callback();
            def.resolve();
        },
        ...
    });
    return def.promise();
}

次に、これを行うことができます:

var ajax1 = SendAjax(...);
var ajax2 = SendAjax(...);
var ajax3 = SendAjax(...);

$.when(ajax1, ajax2, ajax3).done(function() {
    //do stuff
});
于 2013-08-16T17:34:04.120 に答える
0

私自身も同様の問題に遭遇しました。while ループで一連の ajax リクエストを実行していました。一部の通話が行われませんでした。それは私を殺していた!! 私の結論は、私のブラウザー (Google Chrome) は「重複した」リクエストを無視するというものでした。

次の疑似コードを見てください。

while (i < ajaxCallArray.length) {
    currentAjaxObject = ajaxCallArray[i];
    ajaxPost = $.post(currentAjaxObject.url, function(data) {
    //response data needs to go into a function such that each request gets its own "data" variable created.otherwise it just overwrites data!!
    processAjaxResponse(data, currentAjaxObject);
        },"json");
i++;
}

もしajaxCallArray[0].url = "http://www.google.com"、、、ブラウザが実際ajaxCallArray[1].url = "http://www.google.com"ajaxCallArray[2].url = "http://www.google.com"呼び出すのは1回だけです!!

解決策: ajaxCallArray[0].url = "http://www.google.com?count=0"、のようなことをしなければなりません。これらの URL パラメーターを使用しない場合でも、それらを区別するために何かを入れるだけですajaxCallArray[1].url = "http://www.google.com?count=0"ajaxCallArray[2].url = "http://www.google.com?count=0"そうすれば、ブラウザーはすべての呼び出しを処理します。

お役に立てれば!!

于 2013-09-01T18:40:14.840 に答える
0

最も簡単なのはカウンターとチェックです:

var counter = 0;

$.ajax('....', function(data) {
    ... do your processing loop here
    counter++;
    if (counter >= 3) {
        do_the_post_counter_stuff();
    }
});

各 ajax 応答ハンドラーが終了すると、カウンターがインクリメントされ、制限を超えているかどうかがチェックされます。制限を超えている場合は、「前進」機能を呼び出すだけです。

于 2013-08-16T17:26:05.980 に答える