浏览 3044 次
锁定老帖子 主题:检查超时---Ajax之四
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-08-16
最后修改:2010-08-18
有时发出一个请求,后端什么时候返回前端并不清楚。有可能是1秒,3秒甚至更长时间。因此有必要添加一个参数来设置等待的时间,如果在设定的时间内没有返回结果则放弃该次请求。 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库并非如此。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-08-18
继续跟进。终于在读完JE上一大片垃圾帖后得以此篇填充饥饿的灵魂。
|
|
返回顶楼 | |
发表时间:2010-08-19
楼上讲的话,我真是觉得有点恶心的感觉!
|
|
返回顶楼 | |
发表时间:2010-08-20
有时候IE7,8下 setTimeOut不好用。。。
倒是setInterval在FF,IE都能行。。。 |
|
返回顶楼 | |
发表时间:2010-08-21
好贴。。项目中正郁闷这个问题呢。
|
|
返回顶楼 | |