2014-01-26 37 views
2

使用$http服务拨打电话时,如果用户在呼叫仍处于进行中时离开该页面,则看起来HTTP请求被中止,并且承诺呼叫其error()处理程序。然而,我似乎无法弄清楚如何检测何时发生此错误的实际问题是从远程服务器(服务器关闭,网络关闭,超时等)收到响应,而不是由于用户导航。这两种情况似乎都将相同的虚拟空响应状态参数传递给错误处理程序。 (data为空,status为0等)。

我认为使用beforeUnload事件处理程序来检测的导航和假设遇到任何错误后,该事件应该被忽略,但是,是不是在移动Safari浏览器支持这一事件,也许还有其他的浏览器,所以它是一个不可靠的解决方案。

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

回答

0

HTML5提供了一个方便的历史API来处理这种情况。不过,它因浏览器而异。为了确保(最多一点)跨浏览器兼容性,我建议您使用库History.js

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

为了您的使用情况,你可以警告的请求已经启动用户,并采取行动作出相应的反应。

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

+0

但是,这只会检测到当前页面内的位置的变化,e.q.查询/散列更改将被用于页面内ajax应用程序导航?这似乎是它的目的。我遇到的问题是,当用户导航到一个全新的URL(如非现场链接)时,我的角度应用程序的$ http错误处理程序正在被调用,所以用户在离开页面之前就会出现错误。 FWIW演示程序似乎没有记录这种导航,链接:http://browserstate.github.io/history.js/demo/ – Yetanotherjosh