- 浏览: 2587555 次
- 性别:
- 来自: 小胖儿的大城
文章分类
最新评论
-
ni4wangba0:
ni4wangba0 写道亲测,算法有问题。对不起,其实是我自 ...
谈谈"求线段交点"的几种算法(js实现,完整版) -
ni4wangba0:
亲测,算法有问题。
谈谈"求线段交点"的几种算法(js实现,完整版) -
kers007:
苹果不让Webapp 在appstore 里发布,我不知道对 ...
苹果真的要在 AppStore 里封杀 WebApp 吗? -
striveandlive:
fins = js大牛
[原创]GT-Template, 一个超轻量级的js模板工具. -
AlwaysYang:
基础扎实的才能行走天下。
关于body的"大小"在ie和ff下的一些基础知识
请大家原谅这个俗气的标题吧
如果这些你已经知道了 就算我火星好了
反正我早已经加入"火星常驻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
显然这个"判断的频率"的这个观点是不正确的.
浏览器是不会通过轮询来做检查的, 实现机制应该是在 类似setReadyState()方法里做的.
==============================
另外 在我测试的例子中 , FF2 会alert多次 readyState==3 ,而 IE6 只会alert 一次 readyState==3.
也就是说 在处理 XHR与服务端交互时IE6和FF2的策略 还有所不同.
不过 目前我尚未知晓 具体的不同在哪里.
欢迎有经验的朋友发表一下看法.
==============================
值得注意的是, 在FireFox 3 中XMLHttpRequest.send之后 (readyState==4)
XMLHttpRequest会自动重新初始化 也就是说 在FF3中 下列例子的alert顺序是
1 2 3 4 1
这个特性是目前其他浏览器不具备的.
==============================
还有一个小细节注意一下 :
xmlHttp.onreadystatechange=function(){
// alert(this)
// 注意 上面那句中的 this 不是 xmlHttp, 是window
}
===============================
正是因为 onreadystatechange 有诸多未统一的细节 和不确定性
所以 在ExtJS 中 根本就没有使用 onreadystatechange 来实现对 XMLHttpRequest的监听.
而是 自己通过 setTimeout 和 setInterval 来实现的 XMLHttpRequest状态跟踪.
我想 这也是一个无奈之举吧.
===============================
说了这么多 可能有点太学究了 太专研细节了
对于框架满天飞的今天 这种细节技术可能确实无关紧要.
大家就看个热闹好了 呵呵
==============================
我测试用的代码 很简陋 呵呵 见笑了
zuoshu 写道
兄弟,你说错啦“也就是说 onreadystatechange 最好在 open之前设置.” 这个在IE6下面如果这样的话,回调函数是设置不好的,设置之后不会被调用, onreadystatechange要在open之后设置。误人了...
确实 我秀逗了
我自己的代码都是 onread... 在open后面的
但是有个事情很奇怪 我这里也是IE6 根本不受这个影响哦
我的 onreadystatechange 写在open前面 也是可以的
IE6后来出了补丁吧
我说要在前面 主要是为了捕捉 open时的状态变化.
忽略了浏览器版本的问题.
不好意思,是我弄错了,我用
用
兄弟,你说错啦“也就是说 onreadystatechange 最好在 open之前设置.” 这个在IE6下面如果这样的话,回调函数是设置不好的,设置之后不会被调用, onreadystatechange要在open之后设置。误人了...
确实 我秀逗了
我自己的代码都是 onread... 在open后面的
但是有个事情很奇怪 我这里也是IE6 根本不受这个影响哦
我的 onreadystatechange 写在open前面 也是可以的
IE6后来出了补丁吧
我说要在前面 主要是为了捕捉 open时的状态变化.
忽略了浏览器版本的问题.
hax 写道
所以要制定标准,一出还出了两个。http://www.w3.org/TR/XMLHttpRequesthttp://www.w3.org/TR/XMLHttpRequest2
无语了
一步一步走是好的方法。
第一个标准用来得到一个最大公约数,也就是将事实标准扶正。
第二个标准用于在这个基础上的改进。
XMLHttpRequest其实是一个不怎么地的API,但是历史证明,推到重来是没可能的,所以只有这样啦。
所以要制定标准,一出还出了两个。http://www.w3.org/TR/XMLHttpRequesthttp://www.w3.org/TR/XMLHttpRequest2
无语了
如果这些你已经知道了 就算我火星好了
反正我早已经加入"火星常驻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
引用
XMLHttpRequest.readyState这个值在IE7和Firefox中都是0,1,2,3,4,
但是经测试,IE各个数都只返回一次,而在firfox中3的值返回多次,
由此可以判断,firfox对readyState值改变的判断的频率高于IE7;...
但是经测试,IE各个数都只返回一次,而在firfox中3的值返回多次,
由此可以判断,firfox对readyState值改变的判断的频率高于IE7;...
显然这个"判断的频率"的这个观点是不正确的.
浏览器是不会通过轮询来做检查的, 实现机制应该是在 类似setReadyState()方法里做的.
==============================
另外 在我测试的例子中 , FF2 会alert多次 readyState==3 ,而 IE6 只会alert 一次 readyState==3.
也就是说 在处理 XHR与服务端交互时IE6和FF2的策略 还有所不同.
不过 目前我尚未知晓 具体的不同在哪里.
欢迎有经验的朋友发表一下看法.
==============================
值得注意的是, 在FireFox 3 中XMLHttpRequest.send之后 (readyState==4)
XMLHttpRequest会自动重新初始化 也就是说 在FF3中 下列例子的alert顺序是
1 2 3 4 1
这个特性是目前其他浏览器不具备的.
==============================
还有一个小细节注意一下 :
xmlHttp.onreadystatechange=function(){
// alert(this)
// 注意 上面那句中的 this 不是 xmlHttp, 是window
}
===============================
正是因为 onreadystatechange 有诸多未统一的细节 和不确定性
所以 在ExtJS 中 根本就没有使用 onreadystatechange 来实现对 XMLHttpRequest的监听.
而是 自己通过 setTimeout 和 setInterval 来实现的 XMLHttpRequest状态跟踪.
我想 这也是一个无奈之举吧.
===============================
说了这么多 可能有点太学究了 太专研细节了
对于框架满天飞的今天 这种细节技术可能确实无关紧要.
大家就看个热闹好了 呵呵
==============================
我测试用的代码 很简陋 呵呵 见笑了
// 页面文件就是 testAjax.html , 所以我请求的是自己 . function createXMLHttp(){ if (window.XMLHttpRequest) { return(new XMLHttpRequest()); } var arr_t = [ '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 ; } var xmlHttp = createXMLHttp(); xmlHttp.onreadystatechange = function(){ alert(xmlHttp.readyState); }; xmlHttp.open('post','testAjax.html',true); xmlHttp.send()
评论
12 楼
fins
2008-12-02
谢谢你的回复
这个问题 我现在也越来越迷糊了
呵呵 等我再研究研究
不过 你说的那个原因是很有可能的哦.
这个问题 我现在也越来越迷糊了
呵呵 等我再研究研究
不过 你说的那个原因是很有可能的哦.
11 楼
zuoshu
2008-12-02
fins 写道
zuoshu 写道
兄弟,你说错啦“也就是说 onreadystatechange 最好在 open之前设置.” 这个在IE6下面如果这样的话,回调函数是设置不好的,设置之后不会被调用, onreadystatechange要在open之后设置。误人了...
确实 我秀逗了
我自己的代码都是 onread... 在open后面的
但是有个事情很奇怪 我这里也是IE6 根本不受这个影响哦
我的 onreadystatechange 写在open前面 也是可以的
IE6后来出了补丁吧
我说要在前面 主要是为了捕捉 open时的状态变化.
忽略了浏览器版本的问题.
不好意思,是我弄错了,我用
function getHTTPObject() { var xmlhttp=false; try {xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");} catch (e) { try{xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");} catch (e) {xmlhttp = false;} }if (!xmlhttp && typeof XMLHttpRequest!='undefined') {xmlhttp = new XMLHttpRequest(); if (xmlhttp.overrideMimeType) {xmlhttp.overrideMimeType('text/xml');} } return xmlhttp; }来得到XMLHTTPObject,再这样做是不行的
用
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的版本问题吧?~
10 楼
fins
2008-12-01
zuoshu 写道
兄弟,你说错啦“也就是说 onreadystatechange 最好在 open之前设置.” 这个在IE6下面如果这样的话,回调函数是设置不好的,设置之后不会被调用, onreadystatechange要在open之后设置。误人了...
确实 我秀逗了
我自己的代码都是 onread... 在open后面的
但是有个事情很奇怪 我这里也是IE6 根本不受这个影响哦
我的 onreadystatechange 写在open前面 也是可以的
IE6后来出了补丁吧
我说要在前面 主要是为了捕捉 open时的状态变化.
忽略了浏览器版本的问题.
9 楼
zuoshu
2008-12-01
兄弟,你说错啦“也就是说 onreadystatechange 最好在 open之前设置.”
这个在IE6下面如果这样的话,回调函数是设置不好的,设置之后不会被调用, onreadystatechange要在open之后设置。误人了...
这个在IE6下面如果这样的话,回调函数是设置不好的,设置之后不会被调用, onreadystatechange要在open之后设置。误人了...
8 楼
llp20_2000
2008-11-24
mark,mark
7 楼
hax
2008-11-07
fins 写道
hax 写道
所以要制定标准,一出还出了两个。http://www.w3.org/TR/XMLHttpRequesthttp://www.w3.org/TR/XMLHttpRequest2
无语了
一步一步走是好的方法。
第一个标准用来得到一个最大公约数,也就是将事实标准扶正。
第二个标准用于在这个基础上的改进。
XMLHttpRequest其实是一个不怎么地的API,但是历史证明,推到重来是没可能的,所以只有这样啦。
6 楼
fins
2008-11-06
hax 写道
所以要制定标准,一出还出了两个。http://www.w3.org/TR/XMLHttpRequesthttp://www.w3.org/TR/XMLHttpRequest2
无语了
5 楼
hax
2008-11-06
所以要制定标准,一出还出了两个。
http://www.w3.org/TR/XMLHttpRequest
http://www.w3.org/TR/XMLHttpRequest2
http://www.w3.org/TR/XMLHttpRequest
http://www.w3.org/TR/XMLHttpRequest2
4 楼
taya
2008-11-05
第一次知道这些细节,谢谢小胖
3 楼
juzhibest
2008-11-05
楼主的阿里妈妈广告 呵呵怎么放这里了.
呵呵. .支持你的阿里妈妈
呵呵. .支持你的阿里妈妈
2 楼
javaDevil
2008-11-04
早就知道了,IBM中国开发上一篇文章,是关于这方面的。
1 楼
天下有鹏
2008-11-04
支持!
发表评论
-
HTML5 与 ”性工能“障碍
2012-12-13 18:08 9396HTML5 与 ”性工能“障碍 最近看了@王淮Harr ... -
聊聊 iOS 5 和 iOS 6 在HTML5 canvas渲染上的差异
2012-09-13 18:40 5864我录制了一段iphone4s 下 ios 5 和 ios 6 ... -
尝试挑战 running panda , HTML5的跑酷类游戏(开发中)
2011-08-01 00:02 5846我业余时间一直在尝试用HTML5 在ios平台上开发webga ... -
移动互联网 与 Web标准化技术
2011-07-14 19:54 3528移动互联网 与 Web标准化技术 ... -
为什么我喜欢safari 胜过chrome和ff?
2011-07-04 00:35 7706抛下IE不谈,目前在浏览器市场里 最受欢迎的莫过于chrome ... -
欢迎参加 "移动平台HTML5动画性能大赛"
2011-03-31 11:38 3677移动平台HTML5动画性能大赛 注 : 此页面为临时页面 待 ... -
为什么在今天,我要选择HTML5 (上) 【此文标题党,还是别看了】
2011-03-30 16:19 3909当初苹果禁止Flash登陆iOS设备时,曾经引起过一场“HTM ... -
HTML5游戏开发入门实例<脆弱的马里奥>
2011-03-14 20:10 10029HTML5游戏开发入门实例<脆弱的马里奥>: ht ... -
3月26号,北京,我将做一期HTML5游戏开发的技术讲座,欢迎参加.
2011-03-11 11:57 20783月26号,我将去北京做一次"html5游戏开发入门 ... -
w3ctech 2011 - 拥抱HTML5 技术大会即将召开,欢迎报名
2011-03-03 23:46 1608w3ctech 2011 - 拥抱HTML5 技术会议将于4月 ... -
[新增视频]我在<当HTML5来敲门>技术沙龙上做的一个关于HTML5游戏开发的分享
2011-02-27 11:03 1859我在2月26号的<当HTML5来敲门>技术沙龙上做 ... -
说说 iOS safari在retina屏下显示图像的原理
2011-02-24 17:05 8177我在 简析 HTML5 canvas在retina屏(视网膜屏 ... -
一个 HTML5 编写的 简谱播放程序
2011-02-17 15:14 3763一个 HTML5 编写的 简谱播放程序 : http:// ... -
试用了一下 HP touchPad ,有点小失望.
2011-02-16 12:57 2760我手里的这台机器是 工程样机. 从样机来看, 这台平板并不出色 ... -
简析 HTML5 canvas在retina屏(视网膜屏幕,如iphone4)设备上的优化(更新原理)
2011-02-11 04:01 9538随着iphone4 的推出, retina ... -
[更新,bug修复了]chrome开启canvas 2D GPU加速后, clearRect的一个严重bug.
2011-01-24 15:54 9709最新版的 chromium. 已经修复了这个bug 经过进一 ... -
我也来重复造个轮子吧 ,发布一个利用原型,在Javascript中实现类机制的简单框架: GT-Class
2011-01-07 11:23 3421我也来重复造个轮子吧 ,发布一个利用prototype(原型, ... -
关于"GPU加速"的简单问答.
2011-01-05 22:34 2700如今使用GPU来代替CPU进 ... -
求助:用这样的方式写Kissy组件,可行吗?(Kissy推荐的方式是怎样的?)
2010-12-29 09:43 1994看了Kissy自带组件的代码,又看了你在D2上的PPT , 看 ... -
简单聊一聊百度的开源JS库:Tangram
2010-12-24 12:20 9459简单聊一聊百度的开源JS库:Tangram 最近百度开源了 ...
相关推荐
1.readyState属性 readyState:只读属性。 作用:通过读取该属性,从而知道XMLHttpRequest 目前进行到了哪一步 取值: 状态码 名称 描述 0 未初始化 默认状态,XMLHttpRequest刚刚被创建 1 打开 调用了对象的...
学习XMLHttpRequest写的几个实例,希望对新手有点帮助。
创建XMLHttpRequest对象的方法.rar创建XMLHttpRequest对象的方法.rar创建XMLHttpRequest对象的方法.rar
NULL 博文链接:https://jiangzhenwei6.iteye.com/blog/735102
全面剖析XMLHttpRequest对象.doc
XMLHttpRequest 提提提户端端http服务器器讯的协协 Example 下面的代码是在 JScript中创建一个 XmlhTtp对象并从服务器请求一个 XML文档。服务器返回XML文档并显示 var xmlHttpReq = new ActiveXObject("MSXML2....
XMLHttpRequest中文参考手册.rar
压缩包“ajax.rar”内含:“《掌握Ajax.chm》”和“《XMLHttpRequest手册.chm》”。 1、《掌握Ajax.chm》包含下列内容: 掌握 Ajax,第 1 部分: Ajax 入门简介 ... 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax ...
XMLHttpRequest方法和属性API,介绍了XMLHttpRequest的方法和属性
在使用xmlHttpRequest对象进行异步访问时,在某一些情况下访问变成同步方式?
XMLHttpRequest对象,Ajax中的技术手册之一
AjaxXMLHttpRequest_Demo02.zip
尽管与其说Ajax是一种技术,不如说是一种技巧,但如果没有对XMLHttpRequest的广泛支持,Google Suggest和Ta-da List可能不会像我们看到的有今天这样的发展,而你可能也不会看到手上的这本书! XMLHttpRequest最早是...
XmlHttpRequest详解XmlHttpRequest详解XmlHttpRequest详解
Ajax中XMLHTTPRequest对象的说明文档,包含其相应的对象和方法
14_利用XMLHttpRequest接受与处理XML数据.doc XMLHttpRequest 接受 处理 XML数据
AJAX中的"A"代表了"异步",这意味着 XMLHttpRequest对象的send()方法可以立即返回,从而让Web页面上的其它HTML/JavaScript继续其浏览器端处理而由服务器处理HTTP请求并发送响应。
未初始化、初始化、发送数据、数据传送中、完成。数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据。
XMLHttpRequest中文参考手册 很详细,不懂XMLHttpRequest的可以看,高手就不要浪费时间了