Ajax readystatechange奇怪的行为

时间:2015-01-31 18:44:00

标签: jquery ajax

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部分。

2 个答案:

答案 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。