2015-11-05 57 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