Firefox上的网页运行良好但IE浏览器没有

时间:2011-03-11 23:07:02

标签: javascript ajax

我有以下代码段:

self.xmlHttpReq = new XMLHttpRequest();

  self.xmlHttpReq.onreadystatechange = function()
  {
    if(self.xmlHttpReq.readyState == 4 && self.xmlHttpReq.status == 200)
    {
      xmlDoc = self.xmlHttpReq.responseXML;
      var xmlVar1 = xmlDoc.getElementsByTagName('var1')[0].childNodes[0].nodeValue;
      var xmlVar2 = xmlDoc.getElementsByTagName('var2')[0].childNodes[0].nodeValue;
    }
  }

在IE中,错误代码显示:

object required, ajax request.js line num, char num

但是,这个相同的ajax请求在Firefox中运行良好。

2 个答案:

答案 0 :(得分:3)

IE和Firefox具有XMLHttpRequest的不同对象名称,您必须检查浏览器并基于此声明新对象。

尝试这样的事情:

function getXHR() {
    var xhr = false;
    if (window.XMLHttpRequest) {
        xhr = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        try {
            xhr = new ActiveXObject("msxml2.XMLHTTP");
        } catch(e) {
            try {
                xhr = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
                xhr = false;
            }
        }
    }
    return xhr;
}

前一段时间我从Jeremy Keith得到了这个,它从未让我失望过。

答案 1 :(得分:2)

Internet Explorer没有XMLHttpRequest对象。相反,它使用ActiveX对象来实现相同的功能。所以,你需要改变这一行:

self.xmlHttpReq = new XMLHttpRequest();

为:

if (window.ActiveXObject) {
    try {
        self.xmlHttpReq = new ActiveXObject('Microsoft.XMLHTTP');
    }
    catch (e) {
        self.xmlHttpReq = new ActiveXObject('Msxml2.XMLHTTP'); // for really old versions of IE. You can leave the try/catch out if you don't care to support browsers from the '90s.
    }
}
else
    self.xmlHttpReq = new XMLHttpRequest();