2009-08-04 11 views
1

Ich habe diesen Code, der in FireFox, Chrome und IE8 funktioniert, aber es funktioniert nicht auf IE6 und IE7.Problem läuft AJAX richtig auf IE6 und 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"; 
     } 
    } 
} 

Wenn ich den Code in jedem anderen Browser außer für IE6 laufen und 7 der Ausgang zeigt mir alle Alarmboxen ab: - Eingetragen Login() - Eingetragen Zustand geändert Anmelden - Eingetragen GetEmailId() - Geben Sie Zustand geändert Anmelden 2

und dann die Fensterposition Änderungen an http://server.com/profile.html

aber wenn ich die gleiche Sache auf IE 6 oder 7 ausführen, wird der Code geht nicht in die statechangedLogin2(), und so die nur Warnungen Ich bekomme hier sind:

  • Eingetragen Login()
  • Eingetragen Staat Anmeldung geändert
  • GetEmailId Eingetragen()

Ich bin nicht in der Lage, um herauszufinden, warum dieses Problem wird auftreten. Warum passiert es und was sollte ich ändern? Das Projekt funktioniert absolut gut auf anderen Browsern einschließlich IE8.

Kann mir jemand helfen, dieses Problem zu lösen?

+0

Gibt es einen Grund für nicht Ajax-Bibliothek von einer Art mit , wie jQuery?Auch, bitte markieren Sie Ihre Code-Abschnitte als Code (die 101010-Taste) –

Antwort

1

Hallo, es tut mir leid, meine Frage erneut zu stellen. aber ich habe dort keine lösung bekommen, also habe ich das versucht. Es tut mir leid.

Wie auch immer ich konnte die Situation mit Hilfe meines Chefs lösen.

alles, was ich getan habe, war GetEmailId Funktion eine eigene Sitzung zu geben. so etwas wie diese:

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

Ich versuchte dies und es funktioniert absolut in Ordnung auf IE 6 n 7 ... :)

Beste Zeeshan

2

Es ist schwer, Ihren Code zu lesen, da er nicht formatiert ist, aber ich denke, Ihr Problem ist, dass Sie xmlhttp in eine globale Variable verwandeln, anstatt sie herumzugeben (ich denke ...).

Versuchen Sie xmlhttp.onreadystatechange Ändern

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

und

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

und dann ändern Sie Ihre Funktionen für statechangedLogin und Login2 lesen Sie die Parameter

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

Das Problem könnte zu akzeptieren Sei es, dass du versehentlich die aktuelle Anfrage in der xmlhttp-Variable, bevor sie beendet wird, was dazu führen kann, dass diese Ereignisse nicht ausgelöst werden. Indem Sie xmlhttp zu einer lokalen Variablen pro Funktion machen, können Sie diese Funktionen mehrmals aufrufen und sie werden sich nicht gegenseitig überschreiben oder stoppen.

+0

nein diese Lösung hat nicht funktioniert. –

+0

und ja mein xmlhttp ist eine globale Variable. Denkst du, das ist ein Problem für den Code nicht in IE6 und 7 zu arbeiten? –

+0

Dies ist nur ein Schuss in die Dunkelheit, aber versuchen Sie, den Namen Ihrer zweiten Methode zu ändern und die Nummer loszuwerden. Ich weiß ehrlich gesagt nicht, ob eine Nummer im IE6/7 Zeitrahmen ein gültiges Javascript ist. (zB ändern Sie es in statechangedLoginTwo(); – Joshua