【发布时间】:2014-05-19 12:25:22
【问题描述】:
在一个项目上工作,我只是发出一个 AJAX 请求来处理一些数据。
服务器完成工作后,返回HTTP 205 RESET CONTENT 响应
我用这个状态码告诉请求者reset the document view
这是我使用的一段代码
$.ajax({
url: '/unread',
method: 'PUT',
data: {
notifications: elements
}
}).done(function(content, message, xhr) {
if (205 !== xhr.status) {
// Generic error message
return;
}
window.location.reload(true)
}).fail(function() {
// Generic error message
})
这在 Internet Explorer (8 及更高版本)、Firefox (28.0) 和 Opera (12.16) 上运行良好。然而 Chrome (33.0) 和 Opera (20.0) 不是刷新页面,而是下载响应内容正在重新加载的页面dump 当调用window.location.reload
这是我尝试过的
-
window.location.href = window.location.href给出相同的结果 -
history.go(0)给出相同的结果 - 如果我删除
window.location.reload,则不会重新加载任何内容 - 清除缓存、删除本地状态或进入私人导航不会改变任何事情
- 如果我更改响应代码(例如 204),它可以正常工作
这是正在发生的事情的视觉网络
其他信息(和更深入的调查)
- 我使用的是 Ubuntu 12.04
- 错误可能在另一台装有 Windows 7 的计算机上重现(相同的 chrome 版本)
- 无法在装有 Debian 7.1(相同 chrome 版本)的其他计算机上重现错误
为什么 Chrome 和 Opera 在 205 HTTP 响应中会出现这样的行为?
【问题讨论】:
-
由于 AJAX 请求是在 后台 中发出的,因此您不能期望对某些 HTTP 响应代码的反应与收到响应 direct 浏览器的请求……也是如此 fe用于 301/302/位置重定向。
-
这就是为什么我想知道它为什么会这样。对于这种情况,AJAX 响应状态代码应该无关紧要。但确实如此,而且仅限于 chrome。
-
也许我没有正确理解您的意思……那么在这种情况下,Chrome 究竟“下载”了什么?
-
如果不清楚,抱歉。它将重新加载的页面下载为转储here(不是带有 205 响应代码的请求)
-
你能告诉
xhr.status的内容是什么吗?它是一个字符串吗?像'205'?
标签: javascript ajax google-chrome http-status-codes