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> 

加支付宝好友偷能量挖...


原创文章,转载请注明出处:ajax对象释放onreadystatechange状态转换函数的问题

评论(0)Web开发网
阅读(188)喜欢(0)JavaScript/Ajax开发技巧