Hello stackoverflow社区,我有STRANGE问题。 我使用ajax将文件上传到服务器。这是代码:
// request
request.addEventListener('readystatechange', function(event){
if(this.readyState==4 && this.status==200){
if (request.responseText=="upload_successful"){
alert("Thank you for sharing past test.");
$(".form").hide();
$(".overlay").hide();
}
}
else {
alert("Sorry, there was a problems adding your test.");
console.log("This server replied with HTTP status "+this.status);
}
});

我的本地主机上的一切正常,但在真正的服务器上我的警报消息("抱歉,出现问题等等。")之后出现(两三次)(&#34) ;感谢您分享...")警报出现,我的文件也上传到服务器并添加到数据库中。 那么为什么它会向ELSE发送两到三次然后跳转到IF部分。
答案 0 :(得分:2)
AJAX请求在完成之前会经过许多中间状态。每个状态更改都会触发onreadystatechange
处理程序。那些其他状态不是错误,它们只是在请求完成之前的临时条件。
status
属性指示错误。如果要报告错误,则应该类似于:
if (this.readyState == 4) { // request is completed
if (this.status == 200 && this.responseText=="upload_successful") { // request was successful
alert("Thank you for sharing past test.");
$(".form").hide();
$(".overlay").hide();
} else {
alert("Sorry, there was a problems adding your test.");
console.log("This server replied with HTTP status "+this.status);
}
}
答案 1 :(得分:-1)
我通过将alert()移动到第一个IF语句找到了我的问题的解决方案,因此如果上传文件,用户不会再看到它。但我仍然有兴趣知道为什么我们会多次跳到ELSE。