2009-08-04 4 views
1

J'ai ce code, qui fonctionne bien dans FireFox, chrome et IE8 mais ne fonctionne pas IE6 et IE7.problème en utilisant AJAX appel IE6 et IE7 - Je pose à nouveau la même question, parce que je n'ai pas eu de solution avant

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

Quand je lance le code dans un autre navigateur, sauf pour IE6 et 7 la sortie me montre toutes les cases d'alerte à partir de: - Entrée Login() - Etat Entrée Changed Connexion - Entrée GetEmailId() - Entrez État changement Connexion 2

et les changements d'emplacement de la fenêtre à http://server.com/profile.html

mais quand je lance la même chose sur IE 6 ou 7, le code ne va pas dans le statechangedLogin2(), et donc les seules alertes je reçois voici:

* Entered Login() 
* Entered State Changed Login 
* Entered GetEmailId() 

Je n'arrive pas à comprendre pourquoi ce problème se produit. Pourquoi cela se passe-t-il et que devrais-je changer? Le projet fonctionne parfaitement bien sur d'autres navigateurs incluent IE8.

Quelqu'un peut-il m'aider à comprendre ce numéro?

+0

Le navigateur génère-t-il des erreurs JavaScript (Outils-> Options Internet-> Avancé (onglet) -> Navigation (catégorie) -> Afficher une notification à propos de chaque erreur de script)? Le code peut-il être réduit (c'est-à-dire appeler GetEmailId), et produire toujours l'erreur? – AaronSieb

+3

S'il vous plaît ne pas ouvrir les questions en double, en particulier lorsque l'original n'était même pas il y a 24 heures ... – ceejayoz

+0

Pouvez-vous capturer d'autres appels à statechangedLogin2 qui ont un readyState différent? Une préoccupation que je vois ici est que les choses ne se terminera pas contrôlé si l'appel pour obtenir l'adresse e-mail échoue. –

Répondre

2

Bonjour, je suis désolé de poster à nouveau ma question. mais je n'obtenais aucune solution là-bas, donc j'ai essayé de le faire. tu en suis désolé.

De toute façon, j'ai été en mesure de résoudre la situation avec l'aide de mon patron. Tout ce que je faisais était de donner à la fonction GetEmailId sa propre session. quelque chose comme ceci:

GetEmailId fonction

()

{ d'alerte ("Entrée 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); }

J'ai essayé et il fonctionne parfaitement bien sur IE 6 n 7 ... :)

Meilleur Zeeshan

0

Peut-on utiliser JQuery, Prototype, Ext JS Base, ou l'un de l'autre librement cadres Javascript disponibles pour faire cela à la place?

Il ya un nombre incalculable de petites incohérences dans les navigateurs, donc je ne recommande pas de réinventer la roue - je sais, je l'ai déjà fait.

Questions connexes