R – Problem running AJAX properly on IE6 and IE7

ajaxinternet explorer

I have this code, which is working fine in FireFox, chrome and IE8 but is it not working on IE6 and IE7.

function GetXmlHttpObject() {
  //var xmlHttp = null;
  try {
    xmlHttp = new XMLHttpRequest();
  } catch (e) {
    try {
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  return xmlHttp;
}

function login()
{
    alert("Entered Login()");   
    var url="http://server.com/ALUauth.php";
    xmlhttp.onreadystatechange=statechangedLogin;
    xmlhttp.open("GET", url, true);
    xmlhttp.send(null);
}

function statechangedLogin()
{
    if(xmlhttp.readyState==4)
    {
        alert("Entered State Changed Login");
        if (xmlhttp.responseText=="Please <a href=http://server.com/ALUauth.php?login>login</a>")
        {
            document.getElementById("ALUauth").innerHTML=xmlhttp.responseText;
        }
        else
        {
            GetEmailId();
        }

    }
}

function GetEmailId()
{   
    alert("Entered GetEmailId()");
    var url="http://server.com/GetPostEmail.php";
    url=url+"&sid="+Math.random();
    xmlhttp.onreadystatechange=statechangedLogin2;
    xmlhttp.open("GET", url, true);
    xmlhttp.send(null);
}

function statechangedLogin2()
{ 
    if(xmlhttp.readyState==4)
    {
        alert("Enter State Changed Login 2");
        if(xmlhttp.responseText=="Login again")
        {
                window.location="http://server.com/profile.html";
        }
    }
}

When I run the code in any other browser except for IE6 and 7 the output shows me all the alert boxes starting from:
– Entered Login()
– Entered State Changed Login
– Entered GetEmailId()
– Enter State Changed Login 2

and then the window location changes to http://server.com/profile.html

but when I run the same thing on IE 6 or 7, the code does not go into the statechangedLogin2(), and so the only alerts I get here are:

  • Entered Login()
  • Entered State Changed Login
  • Entered GetEmailId()

I am unable to figure out why this issue is occuring. Why is it happening, and what should I change? The project is working absolutely fine on other browsers include IE8.

Can some one help me figure this issue of mine.

Best Answer

It's hard to read your code since it isn't formatted but I think your problem is that you're turning xmlhttp into a global variable rather than passing it around (I think...).

Try changing your xmlhttp.onreadystatechange to read

xmlhttp.onreadystatechange = function() { statechangedLogin(xmlhttp); };

and

xmlhttp.onreadystatechange = function() { statechangedLogin2(xmlhttp); };

and then change your functions for statechangedLogin and Login2 to accept the parameter

function statechangedLogin(xmlhttp) {
  // ... code here
}

The problem could be that you're accidentally overwriting the current request in the xmlhttp variable before it's finished which could cause those events not to fire. By making xmlhttp a local variable per function you can call those functions multiple times and they won't overwrite or stop each other.

Related Topic