Как избежать предыдущего ответа ajax, если он был прерван загрузкой других страниц в SPA (одностраничное приложение)? - PullRequest
0 голосов
/ 16 октября 2019

Могу я спросить о концепции СПА? Я разработал веб-страницу на стороне клиента, используя SPA. В меню A щелкает запрос ajax-вызовов и ждет ответа. В течение этого времени, если я перехожу на другую страницу B, приходит ответ Ajax A, и он пытается вызвать код JavaScript, который уже загружен, потому что браузер не выполняет обновление в SPA. Как я могу избежать этой ситуации и игнорировать все предыдущие ответы Ajax A?

$.ajax({
      url: url,
      type: "GET",
      dataType: "json",
      headers: {"Authorization": 'Token ' + myToken},
      success: function(response) {
          my_callback(response); // <== I want to block this if leaves current page...
      },
      error: function(response) {
      },
      complete: function(response) {
      }
    });

1 Ответ

1 голос
/ 16 октября 2019

Вы можете отменить запрос.

Метод XMLHttpRequest.abort () прерывает запрос, если он уже был отправлен. Когда запрос прерывается, его readyState изменяется на XMLHttpRequest.UNSENT (0), а код состояния запроса устанавливается на 0.

    var xhr = $.ajax({
        url: url,
        type: "GET",
        dataType: "json",
        headers: { "Authorization": 'Token ' + myToken },
        success: function (response) {
            my_callback(response); // <== I want to block this if leaves current page...
        },
        error: function (response) {
        },
        complete: function (response) {
        }
    });

if(pageNavigates){
    xhr.abort();
}
...