2014-01-26 33 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