Angularjs $http.post在出现超时时在IE9上崩溃

Angularjs $http.post在出现超时时在IE9上崩溃,angularjs,Angularjs,我这样调用http post函数: $http.post(myUrl, myData, { timeout: 2000 }).success() etc 当响应速度很快时,调用可以正常工作,但是如果响应时间超过2秒,angularjs代码就会崩溃 我创建了一个在IE10、Chrome和Firefox上运行的html页面,并清楚地显示了IE9上的错误: (查看此图,而不是下面的plunker) 我已经检查了angular代码,当出现超时时,它调用xhr.abort()。onreadystatec

我这样调用http post函数:

$http.post(myUrl, myData, { timeout: 2000 }).success() etc
当响应速度很快时,调用可以正常工作,但是如果响应时间超过2秒,angularjs代码就会崩溃

我创建了一个在IE10、Chrome和Firefox上运行的html页面,并清楚地显示了IE9上的错误: (查看此图,而不是下面的plunker)

我已经检查了angular代码,当出现超时时,它调用xhr.abort()。onreadystatechange试图通过调用xhr.getAllResponseHeaders()来获取标题;这就是if失败的原因,因为xhr已中止

这里有一个小插曲:

注意,我只在IE9上见过这种行为。(不幸的是,plunker也有IE9的问题。)

有什么建议吗?有没有AngularJs的核心开发者?
谢谢

您可以尝试一种快捷方式,减少超时时间,看看是否有什么不同

$http.post(url, myData, {timeout: 5000});
此外,您在这一行的末尾缺少一个分号

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

请更正此问题,然后重试

您使用的是什么版本的angular?这是以前版本中的一个已知问题。根据本页,它在1.2.0中已修复。我使用的是1.0.8版。我认为你的链接指的是另一个问题。谢谢。是否使用快捷方式没有区别。在IE9上试试这个,你会看到错误。在其他现代浏览器上,它可以工作!您使用timeout而不是q(deferred)的原因是什么?我使用timeout是因为它是API的一部分,如果需要的时间太长,我想中止请求。这与简单地推迟异步操作的操作不同。有些事情必须解决或拒绝;所以我需要一个暂停。此外,angularJs代码中似乎存在一些根本性的错误,因为它在已中止的xhr上调用了xhr.getAllResponseHeaders()!i、 e.不能有任何标题!