2015-11-05 55 views
1

所以我最近實現了一種方法來取消$ http請求通過傳遞和解析承諾通過超時屬性。

當一個請求被中止時,$ http承諾進入錯誤塊。這一切都很好,在完成所有處理後,我收到angular.js(xdomain.js位於調用堆棧中)中的錯誤,聲明它「無法讀取null屬性'statusText'」。空作爲xhr對象。

當前正在成功取消請求,但是看起來好像xhr對象在調用xhr.onload()後立即被銷燬。

下面是一個例子我如何取消請求:

var request = { 
    url: 'someurl', 
    method: 'get', 
    headers: headers 
    timeout: canceller // this is a promise that I resolve in a controller in order to abort an $http request. This works fine. 
} 

$http(request).then(function() { 
//success block 
}, function() { 
// error block 
}); 

正如我所說的,它進入差錯塊,但它不是的角度誤差時引發該塊的內部,而它似乎與請求返回並且不再有一個xhr對象等待它發生錯誤。

+0

你可以發佈代碼,或足以重現該問題嗎? –

+0

修改爲包含代碼。最初沒有包含代碼,因爲它是中止$ http請求的相當通用的實現。不是隻有在完成運行後纔會出現錯誤的代碼塊。 – tmunnerley

回答

1

這是Angular和Xdomain的常見問題。我喜歡的解決方法是在提交請求時傳入唯一標識符或布爾值。如果請求完成時值已更改,則忽略結果。

+0

同意@Patrick。更簡單和更容易跟蹤,並讓您的控制器處理何時重置唯一標識符,然後控制器可以忽略該響應,如果它不符合id。 – Ben