有时发出一个请求,后端什么时候返回前端并不清楚。有可能是1秒,3秒甚至更长时间。因此有必要添加一个参数来设置等待的时间,如果在设定的时间内没有返回结果则放弃该次请求。
实现思路:发出请求后指定一个时间,如超过该时间没有返回结果则忽略。window对象的setTimeout方法再次起左右了(setTimeout能解决很多IE下古怪的bug)
代码大概如下:
var timeout = opt.timeout || 0;//指定是否启用请求超时处理,不传参数timeout则忽略
var isTimeout = false; //一个标志位,是否超时
if(timeout>0){
setTimeout(function(){
isTimeout = true;
},timeout);
}
//最后将isTimeout用在onreadystatechange处理中
xhr.onreadystatechange = function(){
if (xhr.readyState == 4 && !isTimeout){//当请求完成,且没有超时才处理结果
_onStateChange(xhr, type, success, failure);
}else{}
};
测试这样写
Ajax.text('../servlet/Ajax',{
timeout : 2000,
success : function(){},
failure : function(){}
});
后台我用servlet,直接sleep下即可模拟超时(sleep时间3000大于timeout的设置2000)
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("request success");
out.flush();
out.close();
源码见附件
<<精通JavaScript>>,JQuery作者John Resig著,该书示例也是如此处理,见175页。虽然John写书如此实现,但JQuery库并非如此。
TX nick
发给偶参考的库也是如此处理。
请求超时后,success/failure都不会被调用。这样处理有一定的合理性,但缺陷也显而易见,用户不知是超时了还是其它什么错误。下一篇将有所改进。
分享到:
相关推荐
jQuery作为一个广泛使用的JavaScript库,简化了从客户端到服务器的数据交互,而Ajax超时的设置则是保证请求响应时效性的重要手段。当客户端向服务器发送Ajax请求时,如果服务器没有在合理的时间内响应,就会造成用户...
4. **Verifying Requests(验证请求)**:在测试后,可以检查特定的Ajax请求是否被发送,以确保代码逻辑正确。 5. **Clearing Mocks(清除模拟)**:在每次测试之间清理模拟的Ajax请求,防止不同测试之间的影响。 ...
因此,我们需要编写超时检查脚本来确保Ajax请求在预定时间内得到响应,否则将执行相应的错误处理。 以下是一个用于检查Ajax请求是否超时的脚本代码分析: 1. 首先,创建一个名为Ajax的构造函数,用于初始化...
- `onreadystatechange`事件处理程序:监听请求状态变化,当状态变为4(完成)时,检查`status`属性以确认请求是否成功(通常200表示成功)。 - `responseText`或`responseXML`属性:获取服务器返回的数据,通常是...
// 检查是否已超时,假设超时时间为30分钟 $timeoutSeconds = 30 * 60; if (empty($loginTime) || (time() - $loginTime) > $timeoutSeconds) { // 超时,清除Session并重定向到登录页面 session_unset(); ...
而在长轮询中,客户端发送请求后,服务器并不立即响应,而是保持连接打开状态,直到有新数据可用或者超时才返回响应。这样,一旦服务器端有新的数据更新,客户端可以立即接收到,减少了延迟,提高了实时性。 **PHP...
在开发Web应用时,我们经常会遇到使用Ajax进行数据交互的情况,特别是当数据量非常大时,可能会遇到Ajax请求超时的问题。这个问题不仅影响用户体验,也可能导致应用性能下降。本篇文章将详细探讨这个问题,并提供几...
5. **监听状态变化**:通过 `onreadystatechange` 事件监听请求状态,当状态变为 4(表示完成)时检查 `status` 属性(如 200 表示成功)。 6. **处理响应**:使用 `responseText` 或 `responseXML` 获取服务器返回...
在AJAX(Asynchronous JavaScript and XML)请求中,如果Session超时,通常需要有合适的机制来处理这种情况,以免用户界面出现异常。本文将详细介绍如何使用全局方法来处理AJAX提交时的Session超时,并跳转到特定...
总结来说,处理Ajax请求中的Session超时问题,需要服务器端能够识别并标记超时的Ajax请求,同时客户端需要能够正确响应并处理这些标记。这样的设计既保持了用户体验的连续性,又确保了系统的安全性。在实际项目中,...
3. 监听状态变化:通过XMLHttpRequest对象的onreadystatechange事件,检查readyState属性(表示请求/响应过程的当前状态)和status属性(HTTP状态码),当状态为4(完成)且状态码为200(成功)时,表示请求已完成且...
在本篇“AJAX学习总结(一)--基于jQuery第一个实例”中,我们将探讨如何使用jQuery库实现异步JavaScript和XML(AJAX)技术。AJAX允许我们在不刷新整个页面的情况下,更新网页的部分内容,从而提供更流畅的用户体验...
例如,使用JSONP处理跨域请求,使用缓存减少不必要的服务器交互,合理设置请求超时,以及使用适当的Ajax库如jQuery、axios等简化开发工作。 综上所述,Ajax实例和特效是现代Web开发中的重要工具,它们结合MySQL...
总结来说,本文介绍了在移动端使用jQuery处理点击事件超时的方法,通过设置$.ajax请求的超时处理逻辑,并结合touchstart事件的快速响应特性,提升移动端交互的流畅度。同时,还提供了一种利用$.Deferred对象处理复杂...
在使用jQuery进行AJAX请求时,超时问题是常见的问题之一。超时意味着客户端在等待服务器响应时未能在预定的时间内收到答复,这时AJAX请求会因超时而失败。解决这一问题通常需要对AJAX请求进行合理配置,以及编写相应...
处理AJAX请求可能出现的错误,如网络中断、超时或服务器错误,确保应用的健壮性。 在压缩包文件"validate"中,可能包含了用于实现上述功能的JavaScript脚本、PHP处理文件和示例表单HTML。学习这些文件,可以帮助你...
捕获和处理Ajax请求可能出现的错误,例如超时、网络中断等,可以通过监听error事件或在$.ajax()配置中设置错误回调。 综上所述,Ajax技术在网页应用中扮演着重要角色,通过异步通信实现页面的局部刷新,提升了用户...