【问题标题】:How to detect AngularJS $http errors caused by navigating away from page?如何检测因离开页面而导致的 AngularJS $http 错误?
【发布时间】:2014-02-17 00:15:29
【问题描述】:

当使用$http 服务进行调用时,如果用户在调用仍在进行时离开页面,则似乎 HTTP 请求被中止,promise 调用其error() 处理程序。但是,我似乎无法弄清楚如何检测此错误何时由从远程服务器获取响应的实际问题(服务器关闭、网络关闭、超时等)触发,而不是何时简单地取消请求,因为用户导航。这两种情况似乎都将相同的几乎空的响应状态参数传递给错误处理程序。 (data 为空,status 为 0,等等)。

我考虑使用beforeUnload 事件处理程序来检测导航并假设在该事件之后遇到的任何错误都应该被忽略,但是,移动 Safari 和其他浏览器可能不支持此事件,因此它不是一个可靠的解决方案。

这似乎是一个常见问题 - 人们通常如何处理它?

【问题讨论】:

    标签: angularjs angularjs-service


    【解决方案1】:

    HTML5 提供了一个方便的 History API 来处理这种情况。但是,它因浏览器而异。为了确保(在一定程度上)跨浏览器兼容性,我建议您使用库 History.js

    该库提供了一个您可以处理的有用事件:statechange

    对于您的用例,您可以警告用户已发起请求并相应地响应该操作。

    https://github.com/browserstate/History.js/

    【讨论】:

    • 但这只会检测当前页面中位置的更改,例如页面内ajax应用程序导航将使用查询/哈希更改?这似乎就是它的目的。我遇到的问题是,当用户导航到一个全新的 URL(例如场外链接)时,我的 Angular 应用程序的 $http 错误处理程序被调用,因此用户在离开页面之前会收到一个错误消息。 FWIW 演示应用似乎没有记录这种导航,链接:browserstate.github.io/history.js/demo
    猜你喜欢
    • 1970-01-01
    • 2012-12-02
    • 2011-03-14
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    相关资源
    最近更新 更多