所以我使用普通的javascript(没有jquery)来将文件发送到服务器。服务器脚本PHP最后返回状态代码200,但是javascript正在准备就绪状态== 2.
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状态代码在前端正确回来(我得到了#39; OK')。 JS脚本看到readyState==2
(即阻止总是命中)
我的理解是服务器状态代码200应该给readyState == 4
??
答案 0 :(得分:6)
首先,onreadystate
不只是被解雇一次。它被多次激活,你需要能够处理它。这些是您需要处理的代码:
0 UNSENT - open()尚未被调用
1已打开 - send()尚未被调用
2 HEADERS_RECEIVED - 已调用 send(),并且标题和状态可用
3加载下载; - responseText保存部分数据
4 - 操作已完成
您的代码正在点击readyState == 2
上的else块(收到的标头),并假设它不是错误状态。
您的错误检查应该在request.readyState == 4
检查中。这样,请求就完成了,但也可能出现错误:
if (request.readyState == 4) {
switch(request.status) {
case '200':
message = "Data uploaded successfully.";
break;
// Error handling here
default: alert( "Unexpected error: " + this.statusText + ".\nPlease try again"); break;
}
}
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest