如何检测请求是否中止?

Bru*_*oLM 33 javascript ajax jquery

我正在提出请求然后我就堕胎了.

var x = $.get(url, function (d, e, xhr) { alert(d); });
x.abort();
Run Code Online (Sandbox Code Playgroud)

问题是它执行success函数并返回空数据... (例如这里)

是否有一个jQuery方法可以中止?或者有没有办法检查是否xhr已中止?

fab*_*las 42

检测请求堕胎和避免离线模式误报的最佳方法:

$("#loading").ajaxError(function(event, xhr) {
  if (xhr.status === 0) {
    if (xhr.statusText === 'abort') {
      // Has been aborted
    } else {
      // Offline mode
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

  • 注意:`xhr.statusText` 可能是空字符串,而不是像 Node.js 那样的单词“abort”。事实上,[WHATWG Fetch 规范](https://fetch.spec.whatwg.org/#concept-response-status-message)(与 [XHR 规范](https://xhr. spec.whatwg.org/#the-statustext-attribute)) 仅说明 *“响应具有关联的**状态消息**。除非另有说明,否则它是“确定”的。”* 此外,`xhr.status` 可能是0 在线时,例如。用于 CORS 请求。一个更好的连接丢失检查是`navigator.onLine`。 (2认同)

Bru*_*oLM 12

我发现这里xhr将状态恢复0.似乎是一个jQuery 1.4+错误.在1.3上它称为错误处理程序.

  • 实际上,对应于状态0,但也对应于离线模式状态代码. (2认同)