首页 > 解决方案 > 如果在 SPA(单页应用程序)中被其他页面加载中断,如何避免以前的 ajax 响应?

问题描述

我可以问一些关于SPA的概念吗?我使用 SPA 开发了客户端网页。在菜单 A 中单击它会请求一些 ajax 调用并等待响应。在此期间,如果我转到另一个页面 B,A 的 ajax 响应来了,它试图调用已经加载的 javascript 代码,因为浏览器没有在 SPA 中执行刷新。我怎样才能避免这种情况并忽略之前所有A的ajax响应?

$.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) {
      }
    });

标签: javascriptjqueryhtmlsingle-page-application

解决方案


您可以中止请求。

如果请求已经发送,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();
}

推荐阅读