我正在从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": ""
}
答案 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?