职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 369|回复: 3

IE8+中XMLHttpRequest对象timeout属性及ontimeout事件

[复制链接]
ksdal 发表于 2011-7-18 09:22 | 显示全部楼层 |阅读模式
  
最近在写一个ajax工具库,参考了JQuery等对请求超时的处理。偶然发现IE8的XMLHttpRequest对象已经增加这方面的支持了。在IE9 pre4测试也支持。如果W3C能将这两个东东标准化多好啊,不用那么的hack方式实现了。

见:http://msdn.microsoft.com/en-us/library/ms535874%28VS.85%29.aspx

XMLHttpRequest的timeout属性可以设置,表示在等待响应多少毫秒之后终止。
即如果在规定的时间内浏览器没有收到响应,那么就触发timeout事件,给xhr.ontimeout赋值为一个响应函数后可被执行。

大概如下:
Js代码  
xhr.onreadystatechange = function(){   
    if(xhr.readyState == 4){   
        try{   
            var s = xhr.status;   
            if(s>= 200 && s < 300){   
                //success(xhr);   
            }else{   
                //failure(xhr);   
            }                          
        }catch(e){}   
    }else{}   
};   
xhr.open();   
xhr.timeout = 1000;   
xhr.ontimeout = function(){   
    alert('request timeout');   
}  

xhr.onreadystatechange = function(){
        if(xhr.readyState == 4){
                try{
                        var s = xhr.status;
                        if(s>= 200 && s < 300){
                                //success(xhr);
                        }else{
                                //failure(xhr);
                        }                                               
                }catch(e){}
        }else{}
};
xhr.open();
xhr.timeout = 1000;
xhr.ontimeout = function(){
        alert('request timeout');
}  
超时后再访问xhr的status属性会出异常,因此加上try catch。

源码见附件,注意只在IE8+测试有效。


IE8_XHR.rar (984 Bytes)
下载次数: 24

走就走吧 发表于 2011-7-18 09:22 | 显示全部楼层
顶,学习

醉倚西风 发表于 2011-7-18 09:22 | 显示全部楼层
zhouyrt

最近在写一个ajax工具库,参考了JQuery等对请求超时的处理。偶然发现IE8的XMLHttpRequest对象已经增加这方面的支持了。在IE9 pre4测试也支持。如果W3C能将这两个东东标准化多好啊,不用那么的hack方式实现了。

见:http://msdn.microsoft.com/en-us/library/ms535874%28VS.85%29.aspx

XMLHttpRequest的timeout属性可以设置,表示在等待响应多少毫秒之后终止。
即如果在规定的时间内浏览器没有收到响应,那么就触发timeout事件,给xhr.ontimeout赋值为一个响应函数后可被执行。

大概如下:
Js代码  
xhr.onreadystatechange = function(){   
    if(xhr.readyState == 4){   
        try{   
            var s = xhr.status;   
            if(s>= 200 && s < 300){   
                //success(xhr);   
            }else{   
                //failure(xhr);   
            }                          
        }catch(e){}   
    }else{}   
};   
xhr.open();   
xhr.timeout = 1000;   
xhr.ontimeout = function(){   
    alert('request timeout');   
}  

xhr.onreadystatechange = function(){
        if(xhr.readyState == 4){
                try{
                        var s = xhr.status;
                        if(s>= 200 && s < 300){
                                //success(xhr);
                        }else{
                                //failure(xhr);
                        }                                               
                }catch(e){}
        }else{}
};
xhr.open();
xhr.timeout = 1000;
xhr.ontimeout = function(){
        alert('request timeout');
}  
超时后再访问xhr的status属性会出异常,因此加上try catch。

源码见附件,注意只在IE8+测试有效。


很好,学习
话说我当年 发表于 2011-7-21 11:13 | 显示全部楼层
呵呵,找个机会...
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-27 10:18 , Processed in 0.154212 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表