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

这样,该方法在成功十次时调用自身,然后调用“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 回答