AJAX запрос get вызывается дважды из-за интервала - PullRequest
0 голосов
/ 10 января 2020

У меня проблема с моей функцией интервала. Это моя функция:

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(). У кого-нибудь есть идеи, как я могу сделать это лучше?

Ответы [ 2 ]

2 голосов
/ 10 января 2020

Если вы не хотите, чтобы запросы запускались параллельно, не используйте интервал. Вместо этого используйте тайм-аут, который запускается только один раз. Когда запрос 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);
    });    
}
0 голосов
/ 10 января 2020

Вы успешно очистили интервал с именем verifyPaymentInterval. Попробуйте очистить тот, который называется «интервал».

...