请考虑以下代码:
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次迭代,而不是数千次。
答案 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();