Punit
Punit

Reputation: 35

Webpages on Firefox works well but no on IE

I have following code snippet:

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;
    }
  }

In IE the error code says:

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

However, this same ajax request works fine in Firefox.

Upvotes: 0

Views: 135

Answers (2)

Infotekka
Infotekka

Reputation: 10443

IE and Firefox have different object names for the XMLHttpRequest, you have to check your browser and declare the new object based on that.

Try something like this:

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;
}

I got this from Jeremy Keith some time ago, it has never failed me.

Upvotes: 3

Peter C
Peter C

Reputation: 6307

Internet Explorer doesn't have the XMLHttpRequest object. Instead it uses an ActiveX object for the same functionality. So, you need to change this line:

self.xmlHttpReq = new XMLHttpRequest();

to:

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();

Upvotes: 2

Related Questions