AJAX 由于时间间隔,请求 get 被调用了两次
AJAX request get's called twice because of an interval
我的区间函数有问题。这是我的功能:
let data = {
action: "verify_status",
};
let interval = setInterval( function () {
if ( new Date().getTime() - startTime > 600000 ) {
alert( "Error: Timed out!" );
clearInterval( interval );
}
jQuery.post( ajax_url, data, function () {
} ).success( function () {
clearInterval( interval );
successFunction();
} ).fail( function ( response ) {
if ( response.status === 500 ) {
clearInterval( interval );
}
} );
}, 5000 );
我现在的问题如下:间隔启动一个 AJAX 请求,该请求现在并行运行。只要请求因 HTTP 400
失败就没问题。
但是如果运行成功,我的successFunction()
就会被调用。不幸的是,间隔在外面继续 运行。结果,我的 successFunction()
被调用了两次,有时是三次,尽管我用 clearInterval()
中断了执行。有谁知道我怎样才能做得更好?
您成功清除了名为 verifyPaymentInterval 的时间间隔。也尝试清除名称为 "interval" 的那个。
如果您不希望并行触发请求,则不要使用间隔。相反,使用只运行一次的超时。当 AJAX 请求完成时,设置新的超时以触发下一个。这是确保没有重叠的更好方法。
像这样:
setTimeout(runAjax, 5000);
function runAjax()
{
if (new Date().getTime() - startTime > 600000) {
alert( "Error: Timed out!" );
}
jQuery.post(ajax_url, data)
.success(function ()
{
successFunction();
setTimeout(runAjax, 5000);
})
.fail( function ( response ) {
setTimeout(runAjax, 5000);
});
}
我的区间函数有问题。这是我的功能:
let data = {
action: "verify_status",
};
let interval = setInterval( function () {
if ( new Date().getTime() - startTime > 600000 ) {
alert( "Error: Timed out!" );
clearInterval( interval );
}
jQuery.post( ajax_url, data, function () {
} ).success( function () {
clearInterval( interval );
successFunction();
} ).fail( function ( response ) {
if ( response.status === 500 ) {
clearInterval( interval );
}
} );
}, 5000 );
我现在的问题如下:间隔启动一个 AJAX 请求,该请求现在并行运行。只要请求因 HTTP 400
失败就没问题。
但是如果运行成功,我的successFunction()
就会被调用。不幸的是,间隔在外面继续 运行。结果,我的 successFunction()
被调用了两次,有时是三次,尽管我用 clearInterval()
中断了执行。有谁知道我怎样才能做得更好?
您成功清除了名为 verifyPaymentInterval 的时间间隔。也尝试清除名称为 "interval" 的那个。
如果您不希望并行触发请求,则不要使用间隔。相反,使用只运行一次的超时。当 AJAX 请求完成时,设置新的超时以触发下一个。这是确保没有重叠的更好方法。
像这样:
setTimeout(runAjax, 5000);
function runAjax()
{
if (new Date().getTime() - startTime > 600000) {
alert( "Error: Timed out!" );
}
jQuery.post(ajax_url, data)
.success(function ()
{
successFunction();
setTimeout(runAjax, 5000);
})
.fail( function ( response ) {
setTimeout(runAjax, 5000);
});
}