Internet Explorer中的AngularJS $ http.post错误< = 9

时间:2014-08-17 02:30:51

标签: angularjs internet-explorer cors

我有以下一些代码,它在每个现代浏览器中都能正常工作,但在Internet Explorer 9及更低版本中失败。

authService.login = function(credentials) {
  return $http.post('https://example.com/login', credentials).then(function(res) {
    return res;
  }, function(err) {
    return err;
  });
};

credentials是一个看起来像这样的对象:

{
  username: 'john@example.com',
  password: 'smith'
}

问题是POST实际上从未发生,而是直接跳转到return err;并且甚至没有设置错误。它说Impossible d'effectuer l'opération à cause de l'erreur suivante c00c023e.。关键是 c00c023e ,这可能是一个编码问题,但我不知道这将如何完全阻止调用的发生。

'修复'是使用$http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';允许IE进行POST,但我的后端需要JSON,这样做无济于事。

我正在使用AngularJS 1.2.22。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

评论让我朝着正确的方向前进,这确实是一个CORS问题。事实证明XDomain library提供了一个简单的库无关的修复。

在发出CORS请求的应用中,在之前包含以下脚本

<!--[if lte IE 9]>
    <script src="http://example.com/xdomain/xdomain.min.js" data-slave="http://example.com/xdomain/proxy.html"></script>
<![endif]-->

然后,在example.com域上,复制xdomain.min.js并创建上面proxy.html属性中定义的data-slave文件。代理文件必须包含:

<!DOCTYPE html>
<script src="xdomain.min.js" data-master="https://subdomain.example.com"></script>

跨域请求现在可以在IE9及更低版本中正常运行。您可以通过删除条件注释为每个浏览器而不仅仅是IE使用XDomain,但我怀疑有很大一部分用户使用的浏览器不支持也不是Internet Explorer的CORS。