=波波日志 > JavaScript/Ajax > ajax对象释放onreadystatechange状态转换函数的问题=

ajax对象释放onreadystatechange状态转换函数的问题

  在获取ajax对象的时候,如果是先判断activexobject,然后再是XMLHttpRequest,那么在IE浏览器下都会使用activexobject来创建ajax对象。此时如果要判断onreadystatechange事件是否为空时,如下面的这种语句,IE浏览器下会出错。

+展开
-JavaScript
if(xhr.onreadystatechange)//这样会在IE下出错
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> 


  测试代码如下,先判断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> 
类别:JavaScript/Ajax 作者:波波 日期:2011-02-25 【评论:0】 
 
暂时没有评论!
发表留言
  • *昵称:
  • 头像:
  • 电子邮件: [留下您的邮件,方便管理员回复您。]
  • 个人网站: *验证码:
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载或引用的作品侵犯了您的权利,请通知我们,我们会及时删除!
Powered by showbo,©2012,桂ICP备05005887号 京公网安备1101055090