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
原创文章,转载请注明出处:ajax对象释放onreadystatechange状态转换函数的问题
+展开
-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>
加支付宝好友偷能量挖...
原创文章,转载请注明出处:ajax对象释放onreadystatechange状态转换函数的问题