关于 "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 谢谢你的回复
这个问题 我现在也越来越迷糊了
呵呵 等我再研究研究
不过 你说的那个原因是很有可能的哦.