今天测试部测试遇到一个AJAX问题,本来一直测试正常的代码在ie下运行结果不对,是IE6和IE7的兼容问题,代码如下:
function checkIfFriend()
{
if (selectedId==null || selectedId=="")
{
alert("请选择要添加的用户!");
}
else
{
var url = "/portal/portal.do?method=ifMyFriend&userId="+selectedId+"¶1=${para1}";
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
}else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
{
if (selectedId==null || selectedId=="")
{
alert("请选择要添加的用户!");
}
else
{
var url = "/portal/portal.do?method=ifMyFriend&userId="+selectedId+"¶1=${para1}";
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
}else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
if(req){
req.open("GET",url, true);
req.onreadystatechange = getIfFriend;
req.send(null);
}
}
}
req.open("GET",url, true);
req.onreadystatechange = getIfFriend;
req.send(null);
}
}
}
现象是req.responseTEXT显示undefined
经查是
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
}else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
req = new XMLHttpRequest();
}else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
出问题了
正确的书写顺序是
if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
}
req = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
}
因为Windows IE 5 及以上版本使用ActiveX对象; 而Mozilla、Netscape 7、Opera和Safari 1.2及以上版本使用XMLHttpRequest对象,由于IE7开始也支持new XMLHttpRequest,但支持的又有bug,导致req声明不正确,据说给IE7打一下补丁就好了,不打补丁IE7有些问题,所以在书写代码时应先试window.ActiveXObject。