读书人

关于 quot;XMLHttpRequest 的 readyStatequot;

发布时间: 2012-11-11 10:07:57 作者: rapoo

关于 "XMLHttpRequest 的 readyState" 几个你可能不知道的细节.
请大家原谅这个俗气的标题吧

如果这些你已经知道了 就算我火星好了
反正我早已经加入"火星常驻JE办事处"了.

==============================

XMLHttpRequest.onreadystatechange 按照定义 是
当 XMLHttpRequest 的 readyState 发生变化时 触发.

[ 注: readyState 在 XMLHttpRequest.open时即改变,
也就是说 onreadystatechange 最好在 open之前设置. ]


在 opera safari chrome IE7 FF3 中是这样.
但是 在 IE6 和 FF2中 却并不总是如此.

==============================

在 opera safari chrome IE7 FF3 中,
只有当 readyState 状态发生变化时 才会触发 onreadystatechange .
这里的"变化" 是指 readyState 有了新值而且这个新值和之前的值不一样.

所以 最后我附上的测试代码 在 opera safari chrome IE7 FF3 中, 每种状态值只会alert一次.

但是 在IE6 和 FF2中 , readyState 只要被重新赋值 ,不管值和之前是否一样,都会触发 onreadystatechange 事件.

xhr.open 之后 readyState==1
xhr.send 之初 readyState==1
....

在上述两个时刻 IE6 和 FF2中 都会触发 onreadystatechange 事件,
而 opera safari chrome IE7 FF3 则只会在 open时触发一次 ,下次触发则已经是在 readyState !== 1 时.

关于此问题 网上也有人提及
http://blog.csdn.net/hulefei29/archive/2008/04/18/2305683.aspx



==============================



我测试用的代码 很简陋 呵呵 见笑了

  无语了
function getHTTPObject(){ if (window.XMLHttpRequest) { return(new XMLHttpRequest()); } var arr_t = [ "MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP" ]; for(var i=0; i<arr_t.length; i++) { try { xmlhttp_ver = arr_t[i]; return new ActiveXObject(arr_t[i]); }catch(e) {} } return null ; }
得到XMLHTTPObject再这样设置是可以的。问问是XMLHTTPObject的版本问题吧?~ 12 楼 fins 2008-12-02 谢谢你的回复
这个问题 我现在也越来越迷糊了
呵呵 等我再研究研究

不过 你说的那个原因是很有可能的哦.

读书人网 >XML SOAP

热点推荐