两个问题:ie+ajax 和 ie+getElementsbyname
2011-02-14 13:51
260 查看
原文地址:http://blog.thesharpmind.com/?p=11001
第一个问题不能说是ie的错,只能说ie与其他浏览器的设计思路不同而已。ie追求的是大而全,ff和chrome更加具有开源软件的小而精的特点。在对于ajax的兼容上就可以看出来,ie希望代替开发者把xmlhttp请求的缓存工作给完成了,于是很多人写的ajax代码在ff可以正常运行而在ie就有问题。这主要就是ie的缓存在捣鬼。
解决办法有两个:
1:在AJAX请求的页面后加个随机函数,我们可以使用随机时间函数
在javascript发送的URL后加上t=Math.random()
当然,不是直接把t=Math.random()拷贝到URL后面,应该像这样:URL+"&"+"t="+Math.random();
2:在XMLHttpRequest发送请求之前加上XMLHttpRequest.setRequestHeader("If-Modified-Since","0")
一般情况下,这里的XMLHttpRequest不会直接使用
你应该可以找到这样的代码
XXXXX.send(YYYYYY);
那么,就把它变成
XXXXX.setRequestHeader("If-Modified-Since","0");
XXXXX.send(YYYYYY);
第二个问题在我看来就是ie的失误了。根据w3c的定义,getElementsByName应该是获取匹配name属性关键字的html元素,可是“个性”的ie偏偏在这里去匹配id属性。而相反,对于getElementById ie又去匹配name。虽然这并不会带来什么技术上的障碍,但是这么做一来未被规则和常理,二来给初学者造成困难。这一点也体现了ie难伺候的特点。
解决办法:很简单,对每个元素均设置相同的id和name属性。(如果你还有更好的解决方法,请告诉我,不胜感谢)
第一个问题不能说是ie的错,只能说ie与其他浏览器的设计思路不同而已。ie追求的是大而全,ff和chrome更加具有开源软件的小而精的特点。在对于ajax的兼容上就可以看出来,ie希望代替开发者把xmlhttp请求的缓存工作给完成了,于是很多人写的ajax代码在ff可以正常运行而在ie就有问题。这主要就是ie的缓存在捣鬼。
解决办法有两个:
1:在AJAX请求的页面后加个随机函数,我们可以使用随机时间函数
在javascript发送的URL后加上t=Math.random()
当然,不是直接把t=Math.random()拷贝到URL后面,应该像这样:URL+"&"+"t="+Math.random();
2:在XMLHttpRequest发送请求之前加上XMLHttpRequest.setRequestHeader("If-Modified-Since","0")
一般情况下,这里的XMLHttpRequest不会直接使用
你应该可以找到这样的代码
XXXXX.send(YYYYYY);
那么,就把它变成
XXXXX.setRequestHeader("If-Modified-Since","0");
XXXXX.send(YYYYYY);
第二个问题在我看来就是ie的失误了。根据w3c的定义,getElementsByName应该是获取匹配name属性关键字的html元素,可是“个性”的ie偏偏在这里去匹配id属性。而相反,对于getElementById ie又去匹配name。虽然这并不会带来什么技术上的障碍,但是这么做一来未被规则和常理,二来给初学者造成困难。这一点也体现了ie难伺候的特点。
解决办法:很简单,对每个元素均设置相同的id和name属性。(如果你还有更好的解决方法,请告诉我,不胜感谢)
相关文章推荐
- 解决ie对getElementsByName支持的问题[zz]
- getElementsByName 在ie不同版本下的兼容问题
- IE不支持getElementsByClassName()方法的问题
- 关于IE中getElementsByClassName不能用的问题
- WEB中关于document.getElementsByName在IE中失效的问题
- ie的大问题,关于document。getElementById和getElementsByName
- 关于IE中getElementsByClassName不能用的问题解决方法
- 解决 IE 不支持 document.getElementsByClassName()
- 用脚本创建的元素在IE中用getElementsByName()获取不到
- ie8兼容问题(一) getElementsByClassName
- ie不支持getElementsByClassName,所以要自己实现获取类名为className的所有元素。
- innerHTML 和 getElementsByName 在IE下面的bug 的解决
- 解决 IE 不支持 document.getElementsByClassName() 的方法
- document.getElementsByName 、document.getElementById 在IE与FF中有着不同实现。
- getElementsByName 兼容IE FF的方法
- 水滴石穿之getElementsByName()、IFRAME背景开关、HTML控件获取焦点问题
- IE支持GetElementsByClassname
- 让getElementsByName适应IE和firefox
- document.getElementsByClassName在ie8及其以下浏览器的兼容性问题