AngularJS 在 Internet Explorer 中出现 $http.post 错误 <= 9



我有以下代码,在所有现代浏览器中都可以正常工作,但在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.

任何想法?

评论引导我走向正确的方向,这确实是一个CORS问题。事实证明,XDomain库提供了一个简单且与库无关的修复。

在发出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并创建上面在data-slave属性中定义的proxy.html文件。代理文件必须包含:

<!DOCTYPE html>
<script src="xdomain.min.js" data-master="https://subdomain.example.com"></script>
跨域请求现在可以在IE9及以下版本中正常工作。通过删除条件注释,您可以将XDomain用于所有浏览器,而不仅仅是IE,但我怀疑有很大一部分用户使用不支持CORS的浏览器,也不是Internet Explorer。

相关内容

  • 没有找到相关文章

最新更新