=波波日志 > JavaScript/Ajax > ajax对象释放onreadystatechange状态转换函数的问题=
ajax对象释放onreadystatechange状态转换函数的问题
在获取ajax对象的时候,如果是先判断activexobject,然后再是XMLHttpRequest,那么在IE浏览器下都会使用activexobject来创建ajax对象。此时如果要判断onreadystatechange事件是否为空时,如下面的这种语句,IE浏览器下会出错。
如果是先判断XMLHttpRequest,然后再是activexobject,那么使用XMLHttpRequest创建的对象支持使用onreadystatechange获取的。
IE7+浏览器支持XMLHttpRequest对象,所以不会出错,如果你改成判断activexobject先再是XMLHttpRequest,IE7+浏览器也会出错。
但是IE6不支持XMLHttpRequest,只能使用acx创建,所以使用if(xhr.onreadystatechange)时就出错,设置onreadystaechange=null语句也会出错。
创建ajax对象时如果使用activexobject,这种释放资源的操作就只能由javascript引擎处理就行了。或者使用delete xhr.onreadystatechange,不过不知道能正确释放资源没有,有待考证。
测试代码如下,先判断XMLHttpRequest然后再到activexobject
测试代码如下,先判断activexobject然后再到XMLHttpRequest
+展开
-JavaScript
if(xhr.onreadystatechange)//这样会在IE下出错
xhr.onreadystatechange=null;//这样来释放onreadystatechange状态转换函数也会出错。可能是IE浏览器下activexobject的bug吧。。
xhr.onreadystatechange=null;//这样来释放onreadystatechange状态转换函数也会出错。可能是IE浏览器下activexobject的bug吧。。
如果是先判断XMLHttpRequest,然后再是activexobject,那么使用XMLHttpRequest创建的对象支持使用onreadystatechange获取的。
IE7+浏览器支持XMLHttpRequest对象,所以不会出错,如果你改成判断activexobject先再是XMLHttpRequest,IE7+浏览器也会出错。
但是IE6不支持XMLHttpRequest,只能使用acx创建,所以使用if(xhr.onreadystatechange)时就出错,设置onreadystaechange=null语句也会出错。
创建ajax对象时如果使用activexobject,这种释放资源的操作就只能由javascript引擎处理就行了。或者使用delete xhr.onreadystatechange,不过不知道能正确释放资源没有,有待考证。
测试代码如下,先判断XMLHttpRequest然后再到activexobject
+展开
-HTML
<script type="text/javascript">
var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsoft.xmlhttp");
alert(xhr)
xhr.onreadystatechange = function () { }
try { alert(xhr.onreadystatechange) } catch (e) { alert('Error'); }//IE6浏览器会报错,IE7+由于支持XMLHttpRequest,所以不会报错
alert(typeof xhr.onreadystatechange);//IE6浏览器输出unknown,IE7+及firefox为object或者function
try { xhr.onreadystatechange = null; } catch (e) { alert('realease Error1'); }//IE6浏览器报错,IE7+及firefox不会报错
try { delete xhr.onreadystatechange; } catch (e) { alert('realease Error'); }//都不报错,不过不知道释放了资源没有
</script>
var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsoft.xmlhttp");
alert(xhr)
xhr.onreadystatechange = function () { }
try { alert(xhr.onreadystatechange) } catch (e) { alert('Error'); }//IE6浏览器会报错,IE7+由于支持XMLHttpRequest,所以不会报错
alert(typeof xhr.onreadystatechange);//IE6浏览器输出unknown,IE7+及firefox为object或者function
try { xhr.onreadystatechange = null; } catch (e) { alert('realease Error1'); }//IE6浏览器报错,IE7+及firefox不会报错
try { delete xhr.onreadystatechange; } catch (e) { alert('realease Error'); }//都不报错,不过不知道释放了资源没有
</script>
测试代码如下,先判断activexobject然后再到XMLHttpRequest
+展开
-HTML
<script type="text/javascript">
var xhr = window.ActiveXObject ? new ActiveXObject("microsoft.xmlhttp") : new XMLHttpRequest();
alert(xhr)
xhr.onreadystatechange = function () { }
try { alert(xhr.onreadystatechange) } catch (e) { alert('Error'); } //IE浏览器都会报错
alert(typeof xhr.onreadystatechange); //IE浏览器输出unknown
try { xhr.onreadystatechange = null; } catch (e) { alert('realease Error1'); } //IE浏览器报错
try { delete xhr.onreadystatechange; } catch (e) { alert('realease Error'); } //都不报错
</script>
var xhr = window.ActiveXObject ? new ActiveXObject("microsoft.xmlhttp") : new XMLHttpRequest();
alert(xhr)
xhr.onreadystatechange = function () { }
try { alert(xhr.onreadystatechange) } catch (e) { alert('Error'); } //IE浏览器都会报错
alert(typeof xhr.onreadystatechange); //IE浏览器输出unknown
try { xhr.onreadystatechange = null; } catch (e) { alert('realease Error1'); } //IE浏览器报错
try { delete xhr.onreadystatechange; } catch (e) { alert('realease Error'); } //都不报错
</script>
类别:JavaScript/Ajax 作者:波波 日期:2011-02-25 【评论:0】
相关文章
暂时没有评论!
发表留言
热门博文
- AJAX跨域问题解决办法
- ajax问题总结
- jQuery dataType指定为json的问题
- ajax+asp.net+mssql无刷新聊天室
- ajax无刷新上传文件,使用iframe模仿
- ajax对象abort方法
最新博文
- jquery+flash显示图片实时加载进度插件
- jquery浮动层拖动插件
- firefox NPMethod called on non-NPObject wrapped JSObject!错误
- IE浏览器setCapture和releaseCapture介绍
- 51.la统计出问题了
- 隐藏删除ckeditor状态栏
随机博文
- JavaScript中parseInt()函数问题
- firefox Selection and Range参考文档
- ckeditor添加自定义的功能按钮
- 模仿163/qq图片浏览效果js文件说明
- CKeditor的配置及上传设置
- 仿CSDN的鼠标悬停效果
广告商赞助

