2013-10-14 45 views
0

我打電話的HTTP POST功能是這樣的:

$http.post(myUrl, myData, { timeout: 2000 }).success() etc 

呼叫完美的作品時,反應速度快,但如果響應時間超過2秒的angularjs代碼崩潰!

我創建的IE10,Chrome和Firefox的運行,並明確一個HTML頁面顯示了IE9的錯誤: http://www.apxproto.com/api/ngPost.htm(查看而非以下plunker本)

我檢查的角代碼,當它有一個超時它調用xhr.abort()。 xhr.onreadystatechange嘗試通過調用xhr.getAllResponseHeaders()來獲取標題;這是因爲xhr被中止而失敗的地方。

這裏有一個plunker:http://plnkr.co/12rp7WqmDpPJC5ASazkJ

請注意,我只看到IE9上的這種行爲。 (不幸的是,plunker在IE9上也有問題。)

有什麼建議嗎?任何AngularJs Core開發者都在那裏? 感謝

+0

您使用的角度版本是什麼?這是以前版本中的一個已知問題。根據這個頁面https://github.com/angular/angular.js/issues/1472它被固定在1.2.0 – Ronnie

+0

我使用的是1.0.8版本。我認爲你的鏈接指的是一個不同的問題。謝謝。 – Bonneville

回答

0

您可以用快捷方式試圖減少超時,看看它是否有差別

$http.post(url, myData, {timeout: 5000}); 

而且,你錯過了這行的最後一個分號

$log.info('Calling Url: ' + url + '. Timeout: ' + timeout) 

更正此錯誤並再試一次

+0

快捷方式是否使用無關緊要。在IE9上試試這個http://www.apxproto.com/api/ngPost.htm,你會看到錯誤。在其他現代瀏覽器上,它工作正常! – Bonneville

+0

你使用超時而不是q(延遲)的任何原因? –

+0

我正在使用超時,因爲它是API的一部分,因爲如果需要的時間太長,我想中止請求。這與簡單地推遲對異步操作的操作不同。某件事必須解決或拒絕;所以我需要暫停。此外,在angularJs代碼中,似乎有一些根本性的錯誤,因爲它在已經中止的xhr上調用xhr.getAllResponseHeaders()。即不能有任何標題! – Bonneville