所以我使用普通的JavaScript(没有jQuery),将文件发送到服务器。服务器PHP脚本返回状态码200结尾,而是JavaScript是越来越readyState的== 2为什么XmlHttpRequest readyState = 2在200 HTTP响应代码
的PHP代码发送回状态码200:
header('X-PHP-Response-Code: 200', true, 200);
exit;
的JavaScript是这样做的:
request.onreadystatechange = function() {
if (request.readyState == 4) {
var message;
switch(request.status) {
case '200':
message = "Data uploaded successfully.";
break;
case '406':
message = "Incorrect file format. Please try again.";
break;
case '410':
message = "Unexpected error. Please contact support.";
break;
default:
break;
}
status_message_container.innerHTML = message;
submit_button.disabled = false;
}
else {
alert("Unexpected error: " + this.statusText + ".\nPlease try again");
}
};
request.send(formData);
甚至知道HTTP 200状态代码在前端正确返回(我'OK')。 JS脚本看到readyState==2
(即其他块始终打)
我的理解是,服务器状态码200应该给readyState == 4
?
我知道'onreadystate'击中多次 - 其实随时readyState的变化。具体来说,我想知道为什么** readyState不是4 **当我发回HTTP 200?那么操作**是否完成?如果不是,服务器脚本必须给出什么指示才能获得'readyState == 4'? _EDIT:_您的代码将因HTTP状态200上的readyState == 2而失败。 – snowbound 2014-10-17 07:29:17
您的readyState最终可能会击中完成的块。它只是在它收到错误时首先触及“错误”部分。当收到响应时它应该总是收到* done * - 它的错误是否由响应代码定义。更新回答以更好地解释, – CodingIntrigue 2014-10-17 07:31:18
我的代码不会失败。当返回任何*状态代码时,readyState * * * 2(当收到头部时)**和** 4(当响应已经下载)。 – CodingIntrigue 2014-10-17 07:33:45