2009-08-04 6 views
1

J'ai ce code, qui fonctionne bien dans FireFox, chrome et IE8 mais ne fonctionne pas sur IE6 et IE7.Problème fonctionnant AJAX correctement sur IE6 et 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"; 
     } 
    } 
} 

Quand je lance le code dans un autre navigateur, sauf pour IE6 et 7 la sortie me montre toutes les boîtes d'alerte à partir de: - Entrée Login() - Etat Entrée Changé Connexion - Entrée GetEmailId() - Entrez Etat Changed 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 me voici:

  • Entrée Login()
  • Etat Entrée Changé Connexion
  • Entrée GetEmailId()

Je ne peux pas comprendre pourquoi cette question est INTERVENUES. 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

Y at-il raison de ne pas utiliser la bibliothèque ajax de quelque sorte , comme jQuery?Aussi, veuillez marquer vos sections de code comme code (le bouton 101010) –

Répondre

1

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:

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

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

Meilleur Zeeshan

2

Il est difficile de lire votre code car il n'est pas formaté mais je pense que votre problème est que vous transformez xmlhttp en une variable globale plutôt que de le transmettre (je pense ...).

Essayez de changer xmlhttp.onreadystatechange lire

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

et

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

puis modifiez vos fonctions pour statechangedLogin et Login2 d'accepter le paramètre

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

Le problème pourrait soit que vous écrasez accidentellement la demande actuelle dans le Variable xmlhttp avant qu'elle ne soit terminée, ce qui pourrait empêcher ces événements de se déclencher. En faisant de xmlhttp une variable locale par fonction, vous pouvez appeler ces fonctions plusieurs fois et elles ne vont pas écraser ou s'arrêter les unes les autres.

+0

non cette solution n'a pas fonctionné. –

+0

et oui mon xmlhttp est une variable globale. Pensez-vous que c'est un problème pour le code de ne pas fonctionner dans IE6 et 7? –

+0

Ceci est juste un coup dans le noir, mais essayez de changer le nom de votre deuxième méthode et se débarrasser du nombre. Honnêtement, je ne sais pas si un numéro est valide javascript dans la période IE6/7. (par exemple, changez-le en statechangedLoginTwo(); – Joshua

Questions connexes