当服务器没有响应时如何处理 ajax 调用
How to handle ajax call when there is no response from the server
我有一个ajax调用一些数据(使用jQuery(。 用户单击"提交"(并且 ajax 调用已发送(后,我显示"请稍候..."在请求返回之前禁用所有内容的消息(因此用户不会双击或单击其他内容并搞砸事情(。
当出现任何类型的错误时,它工作得很好 - "请稍候..."消失了,我正在向用户显示出了什么问题。
但是,如果服务器由于通信错误而没有向我返回任何内容,会发生什么情况?
我为此找到的解决方案是为">请稍候......"消息设置10秒的超时,该消息在此之后它将消失并显示"通信失败"的错误。我假设如果服务器在 10 秒后没有响应,那么它根本不会响应 - 但它是错误的假设。
问题是 - 我怎么能确定 20 秒后服务器不会返回某些内容?可能发生的情况是用户单击提交 --> 10 秒后他收到错误消息 --> 5 秒后服务器响应并混淆用户
如何确保在隐藏"请稍候...."消息后,服务器不会弹出任何内容?
当您向服务器发送请求时。 除非服务器响应,否则连接将打开并保持打开状态。
1.如果由于服务器端的某些错误而无法响应,则通常发回5xx的响应代码(503(
2.如果由于某些连接问题导致连接提前终止,那么jQuery也会将其视为错误。
1.so 如果要等待服务器发送请求或连接终止(以前发生(,则可以使用jquery ajax
中的completed
选项。
2.如果您处于服务器即使在 20 秒后也没有响应的情况,并且您认为它现在应该已经响应,请使用超时。
3.最后,如果您的问题是您正在使用某种自定义的(手工制作的HTTP服务器(,即使遇到一些错误也不会结束请求,那么至少对其进行足够的自定义,以便它发回一些响应代码(因为这是请求和响应的HTTP模型(
你可以处理这样的事情
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);
}
});
- 触发请求时生成唯一令牌,
- 保留有效令牌的列表,
- 请求超时/失败时删除令牌,
- 在执行成功/错误回调之前检查令牌是否仍然有效。
当您需要发送频繁重复的请求(例如自动完成/结果过滤(并且只有最新的处理程序应该触发时,可以调整相同的模式。
- 在同一个javascript事件处理程序中调用不同的函数
- 当达到codeigniter/tank auth会话超时时,在ajax调用中处理php重定向
- Rails——处理多态关联上的Ajax destroy调用
- AJAX调用后使用JavaScript处理数据(CakePHP 2.6.x)
- 如何处理主干渲染和ajax调用
- AngularJS多资源调用,只处理最后一个
- 为什么没有调用我的流错误处理程序
- 在javascript中调用seam远程函数时处理连接错误
- 向调用全局javascript函数的对象添加处理程序
- Selenium如何批处理许多isElementDisplayed调用
- 直接在DOM事件处理程序中调用作用域函数的最短方法是什么
- 正确处理调用 AngularJS $http中的错误
- 如何处理调用相同函数的多个Ajax调用
- 如何处理调用输入按钮单击事件的多个文本框的输入事件
- 如何处理调用一个在deferred .resolve()中返回承诺的函数?
- 我的js函数不能处理2调用在同一时间
- 处理调用可能不再可用的变量的异步函数的最佳实践是什么?
- WebGL中批处理调用的最快方法
- AngularJS多次处理调用承诺
- 通过批处理调用PHP文件