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);
    });    
}