- 浏览: 1172549 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhizhen23:
LZ 提供的链接地址失效了
重写的isPlainObject方法 -
LovingBaby:
LovingBaby 写道function fun() {}f ...
读jq之二(两种扩展) -
LovingBaby:
说的很清楚!jQuery作者为了实现简洁调用的苦心!高超的编程 ...
读jq之一(jq对象的组成) -
hard_ly:
...
将伪数组转换成数组 -
zlxzlxzlxzlxzlx:
这不能算是任意进制之间的转换,例如二十六进制、十二进制又该如何 ...
用递归实现十进制数转换N进制
上一篇只是检查是否超时,超时后却不做任何处理。这里如果超时,会给failure第二个参数msg赋值为“request timeout”。
这样使用者能清楚的知道一次HTTP请求的细节。实现细节较为诡异,得慢慢体会。这里timeout的效果和JQuery,Ext是一样的。如下
Ajax.text('../servlet/Ajax',{ timeout : 2000, success : function(result){}, failure : function(xhr,msg){ alert(msg); } });
源码见附件
- ajax_0.5.rar (1.7 KB)
- 下载次数: 212
评论
12 楼
yangguo
2010-12-22
kimmking 写道
rainsilence 写道
仔细看了下jquery的超时处理
其实很简单,并没有连发几个帖子的必要
假设定义了一个ontimeout句柄
在framework的某个地方定义了触发事件函数dispatchEvent
然后XMLHttpRequest定义为
var xmlHttp = .....
最后超时处理
其实很简单,并没有连发几个帖子的必要
假设定义了一个ontimeout句柄
var ontimeout = function() {.....}
在framework的某个地方定义了触发事件函数dispatchEvent
然后XMLHttpRequest定义为
var xmlHttp = .....
最后超时处理
setTimeout(function() { // 调用timeout句柄 dispatchEvent("timeout"); // 消除浏览器差异 var onreadystatechange = xmlHttp.onreadystatechange; xmlHttp.onreadystatechange = function() {}; try { var oldAbort = xmlHttp.abort(); xmlHttp.abort = function() { oldAbort.call(xmlHttp); xmlHttp.readyState = 0; }; } catch(e) {} xmlHttp.abort(); // 如果xmlHttp需要第二次提交的话,需要以下这句,否则不需要 xmlHttp.onreadystatechange = onreadystatechange; }, 超时时间);
你说对了。
lz就是为了刷分的。
谈到刷分,好像没人能超越你。
11 楼
zhouyrt
2010-09-24
wangweiwei358 写道
楼主,问你个问题哦。
请问下,isTimeout这个变量如果去掉呢?对运行有影响吗?
谢谢你能回复。
请问下,isTimeout这个变量如果去掉呢?对运行有影响吗?
谢谢你能回复。
没有影响,它可选参数。
10 楼
wangweiwei358
2010-09-24
楼主,问你个问题哦。
请问下,isTimeout这个变量如果去掉呢?对运行有影响吗?
谢谢你能回复。
请问下,isTimeout这个变量如果去掉呢?对运行有影响吗?
谢谢你能回复。
9 楼
kimmking
2010-08-22
rainsilence 写道
仔细看了下jquery的超时处理
其实很简单,并没有连发几个帖子的必要
假设定义了一个ontimeout句柄
在framework的某个地方定义了触发事件函数dispatchEvent
然后XMLHttpRequest定义为
var xmlHttp = .....
最后超时处理
其实很简单,并没有连发几个帖子的必要
假设定义了一个ontimeout句柄
var ontimeout = function() {.....}
在framework的某个地方定义了触发事件函数dispatchEvent
然后XMLHttpRequest定义为
var xmlHttp = .....
最后超时处理
setTimeout(function() { // 调用timeout句柄 dispatchEvent("timeout"); // 消除浏览器差异 var onreadystatechange = xmlHttp.onreadystatechange; xmlHttp.onreadystatechange = function() {}; try { var oldAbort = xmlHttp.abort(); xmlHttp.abort = function() { oldAbort.call(xmlHttp); xmlHttp.readyState = 0; }; } catch(e) {} xmlHttp.abort(); // 如果xmlHttp需要第二次提交的话,需要以下这句,否则不需要 xmlHttp.onreadystatechange = onreadystatechange; }, 超时时间);
你说对了。
lz就是为了刷分的。
8 楼
rainsilence
2010-08-22
仔细看了下jquery的超时处理
其实很简单,并没有连发几个帖子的必要
假设定义了一个ontimeout句柄
在framework的某个地方定义了触发事件函数dispatchEvent
然后XMLHttpRequest定义为
var xmlHttp = .....
最后超时处理
其实很简单,并没有连发几个帖子的必要
假设定义了一个ontimeout句柄
var ontimeout = function() {.....}
在framework的某个地方定义了触发事件函数dispatchEvent
然后XMLHttpRequest定义为
var xmlHttp = .....
最后超时处理
setTimeout(function() { // 调用timeout句柄 dispatchEvent("timeout"); // 消除浏览器差异 var onreadystatechange = xmlHttp.onreadystatechange; xmlHttp.onreadystatechange = function() {}; try { var oldAbort = xmlHttp.abort(); xmlHttp.abort = function() { oldAbort.call(xmlHttp); xmlHttp.readyState = 0; }; } catch(e) {} xmlHttp.abort(); // 如果xmlHttp需要第二次提交的话,需要以下这句,否则不需要 xmlHttp.onreadystatechange = onreadystatechange; }, 超时时间);
7 楼
rainsilence
2010-08-21
虽然,abort方法执行后会执行onreadystatechange句柄,但是由于浏览器不同,执行次数,readyState,都会不同
因此,直接对onreadystatechange句柄进行控制是很危险的。
lz的代码因为没有提供ontimeout句柄,所以代码勉强能用
因此,直接对onreadystatechange句柄进行控制是很危险的。
lz的代码因为没有提供ontimeout句柄,所以代码勉强能用
6 楼
rainsilence
2010-08-21
FireFox 下,调用abort,在onreadystatechange中,readyState == 4 会执行两遍。。。而httpstatus永远为0。
5 楼
yudylaw
2010-08-20
Ajax 超时 IE 支持。FireFox 不支持吧。
4 楼
hardPass
2010-08-19
也不对,上面的情况在ie下运行的结果。
在firefox下,没有报timeout
在Chrom下,运行也稍微有不同
在firefox下,没有报timeout
在Chrom下,运行也稍微有不同
3 楼
hardPass
2010-08-19
特地测试了下,果然执行啦!
isTimeout = true;是在abort()后执行的。
一直以为abort()后,XMLHttpRequest.readyState 会被复位为0;
现在看来,其中还做了很多事情啊。
关键是XMLHttpRequest.abort()里干了些啥事情?
根据上面打印的东西,差不多猜测 XMLHttpRequest.abort()里干了这些内容:
1、先将XMLHttpRequest.readyState 直接置为4
2、触发XMLHttpRequest.onreadystatechange 事件
3、最好才将XMLHttpRequest.readyState 置为0
isTimeout = true;是在abort()后执行的。
一直以为abort()后,XMLHttpRequest.readyState 会被复位为0;
现在看来,其中还做了很多事情啊。
if(timeout>0){ timer = setTimeout(function(){ document.write("\n<br>before abort " + xhr.readyState + isTimeout); xhr.abort(); document.write("\n<br>after abort " + xhr.readyState + isTimeout); isTimeout = true; },timeout); } xhr.onreadystatechange = function(){ document.write("\n<br>onreadystatechange " + xhr.readyState + isTimeout); if (xhr.readyState == 4 && !isTimeout){ _onStateChange(xhr, type, success, failure); clearTimeout(timer); }else{} }; before abort 1false onreadystatechange 4false after abort 0false
关键是XMLHttpRequest.abort()里干了些啥事情?
根据上面打印的东西,差不多猜测 XMLHttpRequest.abort()里干了这些内容:
1、先将XMLHttpRequest.readyState 直接置为4
2、触发XMLHttpRequest.onreadystatechange 事件
3、最好才将XMLHttpRequest.readyState 置为0
2 楼
zhouyrt
2010-08-19
hardPass 写道
一口气跟读下来,虽然没有仔细测试代码,但也算是相当认真看了。
这段代码,从上一帖看就觉得有问题。
这一帖还是没变。
只要是超时了,就不会执行_onStateChange,也就不会执行超时的处理啦
xhr.onreadystatechange = function(){ if (xhr.readyState == 4 && !isTimeout){ _onStateChange(xhr, type, success, failure); clearTimeout(timer); }else{} };
这段代码,从上一帖看就觉得有问题。
这一帖还是没变。
只要是超时了,就不会执行_onStateChange,也就不会执行超时的处理啦
hardPass,谢谢您的提醒。看的很仔细。
这段代码没有问题的,你可以测试下超时的情况。这段代码比较容易误解。博客中没有写出来实现细节,因为太诡异了,初看起来不会执行,实际却执行了。
这篇与上篇的区别是超时后调用了xhr的abort方法,调用abort后status为0,在为0的判断中调用failure,这是最关键的。
试下就知...
1 楼
hardPass
2010-08-19
一口气跟读下来,虽然没有仔细测试代码,但也算是相当认真看了。
这段代码,从上一帖看就觉得有问题。
这一帖还是没变。
只要是超时了,就不会执行_onStateChange,也就不会执行超时的处理啦
xhr.onreadystatechange = function(){ if (xhr.readyState == 4 && !isTimeout){ _onStateChange(xhr, type, success, failure); clearTimeout(timer); }else{} };
这段代码,从上一帖看就觉得有问题。
这一帖还是没变。
只要是超时了,就不会执行_onStateChange,也就不会执行超时的处理啦
发表评论
-
跨域请求之JSONP 五
2012-01-12 09:59 1448前面四篇与后台约定的是返回如下的结构 jsonp ... -
跨域请求之JSONP 四
2012-01-11 15:59 1626此次主要是接口调整与代码重构。 接口如下 // ... -
ajax后退解决方案(五)
2011-11-15 07:37 2040五、使用history.pushState ... -
ajax后退解决方案(四)
2011-11-14 11:08 1356三、通过修改location.hash产生历史,hashcha ... -
ajax后退解决方案(三)
2011-11-13 08:43 1107三、使用iframe,通过修改iframe.src产生历史,回 ... -
ajax后退解决方案(二)
2011-11-12 10:23 1433二、使用iframe,通过修改iframe.src产生历史 ... -
ajax后退解决方案(一)
2011-11-11 13:52 1511一、使用iframe,通过document.write产生历史 ... -
跨域请求之JSONP 三
2011-08-15 07:08 1784script请求返回JSON实际上是脚本注入。它虽然解决了跨域 ... -
跨域请求之JSONP 二
2011-08-14 08:25 778续上篇,加两个实用功能 1,增加data属性,请求参 ... -
跨域请求之JSONP 一
2011-08-13 10:46 1985跨域请求的方式有很多种, 1,ifram ... -
JS Queue LazyLoad 之二
2011-08-12 07:26 1422上一篇实现了对多个JS文件的顺序加载,这篇再完善丰富一下。加入 ... -
JS Queue LazyLoad 之一
2011-08-11 14:20 1446前面三篇实现了多个JS并行加载,即各个JS文件相互不依赖。实现 ... -
JS/CSS module LazyLoad 之三
2011-08-11 06:51 1579在开始这篇前,有两个小问题须说明一下 情况 ... -
JS/CSS module LazyLoad 之二
2011-08-10 09:33 1528上一篇完成的JS的按需加载,这篇添加个新方法css,完成对CS ... -
JS/CSS module LazyLoad 之一
2011-08-09 14:21 1569随着web app中JS越来越多,有时页面首次加载时有很多JS ... -
新API解析JSON---Ajax之七
2010-08-16 16:01 2312ECMAScript 5发布有段时间了,其中就包括了解析JSO ... -
创建xhr对象出现异常处理---Ajax之六
2010-08-16 15:40 1921前面几篇一直采用最精简的方式创建Ajax的核心XMLHttpR ... -
检查超时---Ajax之四
2010-08-16 11:17 2435有时发出一个请求,后 ... -
结果分类---Ajax之三
2010-08-16 09:37 1412Ajax中的x指的是xml,早期的数据格式都喜欢用xml,然后 ... -
改造请求参数---Ajax之二
2010-08-16 08:55 1854接上篇。引入了一个私有函数_serialize,它会把js对象 ...
相关推荐
Ajax请求session超时处理流程 java服务器端处理: SessionValidateFilter中修改: if (ServerInfo.isAjax(request)) { request.setAttribute("statusCode", 301); request.setAttribute("message", "Session ...
你可以根据项目需求调整Ajax请求的参数,如缓存策略、请求超时、错误处理等。同时,由于它是基于Leaflet的,所以可以无缝集成到已有的Leaflet项目中,也可以与其他Leaflet插件配合使用,增加更多的功能,如标记、弹...
jQuery是JavaScript库中最广泛使用的之一,其简洁易用的API使得开发者能够方便地处理DOM操作、事件处理以及Ajax请求。jQuery中的$.ajax()函数是一个强大的工具,它允许开发者发起HTTP请求到服务器,获取或发送数据。...
如果在设定的时间内服务器没有响应,则会触发超时处理。使用timeout属性,开发者可以自行决定在什么情况下放弃等待服务器的响应,从而执行其他操作,比如再次发起请求或者给用户一个错误提示。 举个简单的例子,...
基于接口约定的通用回调处理支持(通用错误处理、loading 状态、通用参数、埋点上报<接口超时、接口错误、接口异常、数据埋点等>...) 快速开始 1. 下载安装 手动下载:到代码仓库下载 的 zip 包,取得 dist 目录内...
在0.3.1这个版本中,它对AJAX的支持是其关键特性之一,让我们深入探讨一下这个版本中的AJAX功能及相关知识点。 1. **Dojo AJAX基础** Dojo的AJAX功能主要由`dojo.xhr`模块提供,它提供了一系列方法来发起异步HTTP...
5. **Clearing Mocks(清除模拟)**:在每次测试之间清理模拟的Ajax请求,防止不同测试之间的影响。 使用`jasmine-ajax`,开发者可以编写如下类型的测试: - **Success responses**:测试当Ajax请求成功时,代码...
5. **取消请求**:支持通过返回的 `AbortController` 实例取消正在进行的请求,这对于处理用户交互或组件生命周期中的请求特别有用。 **与 vxe-ajax 和 xeajax 标签关联** `xe-ajax` 通常与 `vxe-ajax` 和 `xeajax...
xhrGet和xhrPost都支持各种选项,例如处理响应的数据类型(JSON、XML、HTML等)、错误处理回调、超时设置等。此外,Dojo还引入了xhrPut和xhrDelete方法,对应HTTP的PUT和DELETE操作,为RESTful API的使用提供了便利...
- 超时处理:设置请求超时时间,超时后自动取消请求或提示用户。 - 请求缓存:对于不经常变化的数据,可以启用缓存机制,减少不必要的服务器请求。 综上所述,`ajax.js`作为一个超轻量级的Ajax库,提供了一种简单...
在jQuery中可以通过$.ajax方法设置请求超时处理,这样如果用户在设定时间内未能完成点击操作,可以给出相应的提示,或者返回到一个安全的状态。 jQuery的$.ajax方法是一种在页面中执行异步HTTP(Ajax)请求的方法。...
4. **ajax.js**:根据项目名,这可能是一个专门处理Ajax请求的JavaScript文件,它实现了XMLHttpRequest对象或Fetch API来实现异步通信。 5. **data**或**mock**目录:可能包含模拟数据文件,用于在开发过程中测试...
- `ajax`: 提示这是一个处理Ajax请求的工具。 - `vxe-ajax`: 可能暗示这个库与`vxe-table`(一个基于Vue的表格组件)有关联,可能有特定的集成方式或优化。 - `xeajax`: 是`xe-ajax`的简写形式,可能在代码或文档...
5 - 对于XMLHttpRequest对象来说,表示请求或响应已被abort,或者连接超时。当状态变为4且状态码为200(表示成功)时,说明请求完成并且可以获取到服务器返回的数据。此时,我们会更新指定ID的div元素,将响应文本...
- **错误处理**:确保有适当的错误处理机制,如请求超时、网络中断等。 - **缓存利用**:对于可缓存的资源,考虑使用HTTP缓存策略。 - **安全性**:注意防止XSS和CSRF攻击,谨慎处理用户输入。 通过IBM的AJAX...
在Web开发中,Session超时处理是一个常见的需求,特别是在用户长时间无操作或系统设定的特定时间后,为了保护用户的数据安全,系统会自动结束用户的会话。对于传统的HTTP请求,服务器端可以通过重定向来提示用户重新...
在ExtJS中,Ajax支持是核心功能之一,它使得在浏览器端与服务器进行异步通信成为可能,无需刷新整个页面。以下是对Ajax支持的详细说明: 1. **Ajax基础**: - Ext.Ajax是ExtJS中的核心模块,用于处理所有与Ajax...
《农民的jQuery之旅——jQuery的Ajax》一文深入浅出地介绍了如何利用jQuery库进行Ajax操作,这在Web开发中非常实用且易于学习。Ajax,全称Asynchronous JavaScript and XML,是一种创建动态网页的技术,允许在不刷新...
本文将详细介绍如何使用全局方法来处理AJAX提交时的Session超时,并跳转到特定页面。 首先,我们可以在服务器端设置一个过滤器(Filter)来检测Session的状态。在Java Web开发中,过滤器可以拦截每个HTTP请求,包括...
在处理Ajax请求时,超时问题是一个常见的挑战。如果服务器响应时间过长,用户可能会遇到页面无响应的情况。因此,我们需要编写超时检查脚本来确保Ajax请求在预定时间内得到响应,否则将执行相应的错误处理。 以下是...