2008-12-31 5 views
2

Pour une raison quelconque, la fonction de rappel onreadystatechange n'est pas appelée en mode asynchrone. J'ai testé le poste en mode synchrone et confirmé que le poste lui-même fonctionne bien (commenté sur le code de test que j'ai utilisé pour vérifier la publication en mode synchrone). Le problème se produit à la fois dans Safari et Firefox dernière version. Quelqu'un peut-il me dire ce que je fais mal ici? Je vous remercie.La fonction onreadystatechange n'est pas appelée

<html> 
    <head> 
    <script> 
    function recordScore(str) 
    { 

    if (str.length==0) 
    { 

     return; 
    } 

    xmlHttp=GetXmlHttpObject(); 
    if (xmlHttp==null) 
    { 
     alert ("Your browser does not support AJAX!"); 
     return; 
    } 

    var url="http://hellworld3.appspot.com/findcountry"; 
    var params = "screenname="+document.getElementById("screenname1").value+"&score="+document.getElementById("score1").value; 
    alert("params: "+params); 
    xmlHttp.open("POST",url,true); 

    xmlHttp.onreadystatechange = function() 
    { 
     alert("entered call back function. readstate value is: "+xmlHttpreadyState+". Response Text is: "+xmlHttp.responseText); 

    if (xmlHttp.readyState==4) 
    { 
     document.getElementById("message").innerHTML=xmlHttp.responseText; 
    } 
    } 
    xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded") 
    xmlHttp.send(params); 

    //Testing code for synchronous mode 
    //alert("Http get status is: "+xmlHttp.status); 
    //alert("Http ready state value is: "+xmlHttp.readyState); 
    //alert("Http get response text is: "+xmlHttp.responseText); 
    //document.getElementById("message").innerHTML=xmlHttp.responseText; 
    } 


    function GetXmlHttpObject() 
    { 
     var xmlHttp=null; 
     try 
     { 
      // Firefox, Opera 8.0+, Safari 
      xmlHttp=new XMLHttpRequest(); 
     } 
     catch (e) 
     { 
      // Internet Explorer 
      try 
      { 
       xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); 
      } 
      catch (e) 
      { 
       xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
     } 
     return xmlHttp; 
    } 

    </script> 


    </head> 


    <body> 

    <form name="testform"> 
     Screename: 
     <input type="text" id="screenname1" name="screenname"> 
     <br/> 
     Score: 
     <input type="text" id="score1" name="score" onchange="recordScore(this.value)"> 
     <br/> 
     <p id="message">test</p> 

     <input type="submit" value="Submit"> 
    </form> 

    </body> 


    </html> 

Répondre

6

vous avez une erreur dans la fonction onreadystatechange:

alert("entered call back function. readstate value is: "+xmlHttpreadyState+". Response Text is: "+xmlHttp.responseText); 

xmlHttpreadyState devrait être xmlHttp.readyState

Après avoir fixé cela, il a travaillé pour moi dans FF3

+0

Merci. Ça a marché. Je ne peux pas croire que je l'ai manqué malgré l'examen du code plusieurs fois. – Satish

0

-moi si je me trompe, mais pour POST ne pas que vous devez faire un setRequestHeader pour Content-Length comme si;

xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xmlHttp.setRequestHeader('Content-length',(params?params.length:0)); 
xmlHttp.send(params); 

Cela pourrait corriger votre problème.

+0

Il a travaillé sans ajouter cette ligne. Je vais rechercher votre point plus loin. J'apprécie vraiment votre aide. La réponse de RoBorg a résolu mon problème – Satish

Questions connexes