Angular JS:http.post在Internet Explorer

时间:2016-08-15 22:07:41

标签: javascript angularjs ajax internet-explorer

我正在从Angular JS发出ajax调用:

var response = $http.post(
    '/services/login/?_nochache='+new Date().getTime(),      
    JSON.stringify(credentials)
);

我添加_nocache设置,认为可能是某些缓存或类似内容。

我还将对象credentials转换为字符串,以为Internet Explorer无法识别该对象。

我真的迷失在这里,在Chrome中,调用完美无缺,在IE 10中,服务的响应为空。

导致这种情况的原因是什么?

修改

该服务返回401 ,这是好的,因为用户错了,但响应应该(就像在其他浏览器中一样),错误字符串说用户错了,在此case为null。

我正在使用这样的承诺:

promise.then(onLoginOk, onLoginError);
...

function onLoginError(response) {
   console.log(JSON.stringify(response));
}

控制台返回

{
  "data": null,
  "status": -1,
  "config": {
    "method": "POST",
    "transformRequest": [
      null
    ],
    "transformResponse": [
      null
    ],
    "url": "http://dev.site.com:8000/api/auth/login/",
    "data": {
      "username": "mail@domain.com",
      "password": "password"
    },
    "headers": {
      "Accept": "application/json, text/plain, */*",
      "Content-Type": "application/json;charset=utf-8"
    }
  },
  "statusText": ""
}

修改

这是我在IE中获得的响应主体。 enter image description here

这些是我使用401获得的标题是正确的,但响应正文是错误的。 enter image description here

2 个答案:

答案 0 :(得分:1)

这似乎与我的问题相同。

就我而言,我的请求功能在除MS Edge之外的每个浏览器中都能正常运行。

我试图找到解决方案或理由,最后我得到了一个。

有些答案建议添加

等标签
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="Mon, 26 Jul 1997 05:00:00 GMT" />

或将代码添加到config

$httpProvider.defaults.headers.get['If-Modified-Since'] = 'Mon, 26 Jul 1997 05:00:00 GMT';
// extra
$httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
$httpProvider.defaults.headers.get['Pragma'] = 'no-cache';

但这些都无法解决我的问题。

最后我看到一个答案说这可能是由Edge中的一种策略处理缓存发生的。

当我使用本地服务器发送请求或获得响应时,可能会发生这种情况。

当在其他服务器上进行测试时,它会消失在本地。

我希望你的问题跟我的一样。

答案 1 :(得分:0)

这是一种延伸,如果我在这里错了,请不要疯了。没有代表点评论。

你看过这篇文章吗? Error 401 and 403 only in Internet Explorer (not in Chrome, Firefox, ..) - IIS configuration?