1

次のコードを検討してください。

var x = 0;
do {
    $.ajax({ 
    type: "POST", 
    url: someurl,
    dataType: 'xml',
    data: xmlString, 
    success: function(xml) { 
             x++;
    }

} while(x<10);

もちろん、これは機能しません。「someurl」に対して何千ものリクエストが行われるためdo whileです。非同期 HTTP リクエストのコールバックに条件を依存させるには、このコードをどのように変更すればよいでしょうか? つまり、リクエスト コールバックを呼び出したときだけ do-while ループを続行するにはどうすればよいでしょうか。そのため、数千回ではなく、11回の反復のみが行われます。

4

3 に答える 3

5

次のように書き直すことができます。

var x = 0;

function ajaxCall() {
    $.ajax({ 
    type: "POST", 
    url: someurl,
    dataType: 'xml',
    data: xmlString, 
    success: function(xml) { 
        x++;
        if (x<10) ajaxCall();
        else afterAjaxCall();
    }
}

function afterAjaxCall() {}

このように、メソッドは10回成功したときに自分自身を呼び出し、次に「after」メソッドを呼び出して他のコードを続行します。

于 2012-10-13T05:30:32.600 に答える
4
var x = 0;
function callAjax() {
    $.ajax({  
        type: "POST",  
        url: someurl, 
        dataType: 'xml', 
        data: xmlString,  
        success: function(xml) {
            x++;
            if(x < 10){                     
                callAjax();
            }
        }
    }
}

これに関する考え方は、successメソッドが最初にカウンターをインクリメントし、次に最大呼び出し数と照合するというものです。それが少ない場合は、別のajaxCallものが作られます。メソッドで追加の呼び出しを行うsuccessことは、大量の呼び出しが行われるのを防ぐ唯一の方法です($ajaxもちろん非同期であるため、すぐに戻ります)

于 2012-10-13T05:30:52.210 に答える
2
var x = 0;
function A() {
    $.ajax({ 
    type: "POST", 
    url: someurl,
    dataType: 'xml',
    data: xmlString, 
    success: function(xml) { 
            x++;
            if(x<10)
            A();
    }

}
A();
于 2012-10-13T05:28:20.513 に答える