如何使`do while`循环(其停止条件)取决于AJAX调用的回调?

时间:2012-10-13 05:24:57

标签: javascript jquery ajax do-while

请考虑以下代码:

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次迭代,而不是数千次。

3 个答案:

答案 0 :(得分:4)

您可以像这样重写:

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() {}

这样,该方法在成功十次后调用自身,然后调用'after'方法继续使用其他代码。

答案 1 :(得分: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当然是异步的,因此立即返回)

答案 2 :(得分:2)

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

}
A();