Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检测导航离开页面导致的AngularJS$http错误?_Angularjs_Angularjs Service - Fatal编程技术网

如何检测导航离开页面导致的AngularJS$http错误?

如何检测导航离开页面导致的AngularJS$http错误?,angularjs,angularjs-service,Angularjs,Angularjs Service,使用$http服务进行调用时,如果用户在调用仍在进行时离开页面,则http请求似乎已中止,承诺将调用其错误()处理程序。但是,我似乎不知道如何检测何时该错误是由从远程服务器获取响应的实际问题(服务器关闭、网络关闭、超时等)触发的,而不是由于用户导航而取消请求。这两种情况似乎都将相同的几乎为空的响应状态参数传递给错误处理程序。(数据为空,状态为0,等等) 我考虑过使用beforeUnload事件处理程序来检测导航,并假设在该事件发生后遇到的任何错误都应该被忽略,但是,mobile Safari和其

使用
$http
服务进行调用时,如果用户在调用仍在进行时离开页面,则http请求似乎已中止,承诺将调用其
错误()
处理程序。但是,我似乎不知道如何检测何时该错误是由从远程服务器获取响应的实际问题(服务器关闭、网络关闭、超时等)触发的,而不是由于用户导航而取消请求。这两种情况似乎都将相同的几乎为空的响应状态参数传递给错误处理程序。(
数据
为空,
状态
为0,等等)

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


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

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

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

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


但这是否只会检测到当前页面中位置的更改,例如页面内ajax应用程序导航将使用的查询/哈希更改?这似乎就是它的目的。我遇到的问题是,当用户导航到一个全新的URL(如非站点链接)时,我的angular应用程序的$http错误处理程序正在被调用,因此用户在离开页面之前会收到一个错误提示。FWIW演示应用程序似乎没有记录这种导航,链接: