我对某些数据进行了ajax调用(使用jQuery)。在用户点击“提交”(并且已发送ajax调用)之后,我显示“请等待...”消息,该消息在请求返回之前禁用所有内容(因此用户不会双击或单击其他内容并使其混乱事情)。
当出现任何错误时效果很好 - “请稍候......”消失,我正在向用户显示出错的地方。
但是如果服务器由于通信错误而没有返回任何内容会发生什么?
我找到的解决方案是为“请稍候......”消息设置10秒的超时时间,之后它消失并显示错误“通信失败”。我假设如果服务器在10秒后没有响应,那么它根本不会响应 - 但这是错误的假设。
问题是 - 如何在20秒后确定服务器不会返回某些内容?可能发生的情况是用户点击提交 - > 10秒后,他收到一条错误消息 - > 5秒钟后服务器响应并混淆用户
如何确保隐藏“请稍候......”消息后,服务器上不会弹出任何内容?
答案 0 :(得分:4)
你可以处理这样的事情
if ( request.readyState == 4 ){ // 4 is "complete"
if ( request.status == 200 ){
// HTTP OK, carry out your normal Ajax processing
// ...
}else{
// something went wrong, report the error
error( "HTTP "+request.status+". An error was »
encountered: "+ request.statusText );
}
}
(或)
$.ajax({
type: "post",
url: "somepage.html",
success: function (data, text) {
//...
},
error: function (request, status, error) {
alert(request.responseText);
}
});
答案 1 :(得分:3)
向服务器发送请求时。除非服务器响应,否则打开连接并保持打开状态。
1.如果由于服务器端的某些错误而无法响应则通常会发回5xx的响应代码(503)
2.如果由于某些连接问题,连接过早终止,那么jquery也会将其视为错误。
1.如果您想等待服务器发送请求或连接终止(之前发生过),那么您可以使用completed
中的jquery ajax
选项。
2.如果您处于服务器即使在20秒后没有响应的状态,并且您认为它现在应该已经响应,请使用超时。
3.最终,如果你的问题是你正在使用某种自定义(手工制作的http服务器),即使它遇到一些错误也不会结束请求,那么至少要自定义它以便它发回一些响应代码(因为这个是请求和响应的HTTP模型)
答案 2 :(得分:1)
当您需要发送频繁的重复请求(例如自动完成/结果过滤)并且只触发最新的处理程序时,可以调整相同的模式。