2009-04-01 6 views
1

Désolé pour la reposter (Admins, s'il vous plaît supprimer l'autre!). depuis que vous avez été d'une grande aide, j'espérais que vous pourriez m'aider encore une fois en posant la question suivante: J'essaye actuellement de travailler avec AJAX en permettant à un managerclass en PHP de communiquer via un XmlHttpobject avec le javascript sur le client. Cependant, je peux envoyer quelque chose au client via JSON, mais je ne peux pas le lire sur le client. En fait j'obtiens l'erreur que le "temps" est un index indéfini dans la session. Alors je me demandais: qu'est-ce que je fais mal?Javascript/ajax/php question: envoi du serveur au client fonctionne, l'envoi du client au serveur échoue

Le javascriptcode Ajax:

<script type="text/javascript"> 
      var sendReq = GetXmlHttpObject(); 
      var receiveReq = GetXmlHttpObject(); 
      var JSONIn = 0; 
      var JSONOut= 0; 
      //var mTimer; 
//function to retreive xmlHTTp object for AJAX calls (correct) 
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; 
} 

      //Gets the new info from the server 
      function getUpdate() { 
       if (receiveReq.readyState == 4 || receiveReq.readyState == 0) { 
        receiveReq.open("GET", "index.php?json="+JSONIn+"&sid=$this->session", true); 
        receiveReq.onreadystatechange = updateState; 
        receiveReq.send(null); 
       }   
      } 
      //send a message to the server. 
      function sendUpdate(JSONstringsend) { 
       JSONOut=JSONstringsend; 
       if (sendReq.readyState == 4 || sendReq.readyState == 0) { 
        sendReq.open("POST", "index.php?json="+JSONstringsend+"&sid=$this->session", true); 
        sendReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 
        alert(JSONstringsend); 
        sendReq.onreadystatechange = updateCycle; 
        sendReq.send(JSONstringsend); 
       }       
      } 
      //When data has been send, update the page. 
      function updateCycle() { 
       getUpdate(); 
      } 
      function updateState() { 
       if (receiveReq.readyState == 4) { 
        // JSONANSWER gets here (correct): 
        var JSONtext = sendReq.responseText; 
        // convert received string to JavaScript object (correct) 
        alert(JSONtext); 
        var JSONobject = JSON.parse(JSONtext); 
        // updates date from the JSONanswer (correct): 
        document.getElementById("dateview").innerHTML= JSONobject.date;   

        } 
        //mTimer = setTimeout('getUpdate();',2000); //Refresh our chat in 2 seconds 
       } 
    </script> 

La fonction qui utilise en fait le code ajax:

//datepickerdata 
     $(document).ready(function(){ 
       $("#datepicker").datepicker({ 
        onSelect: function(dateText){ 
        var JSONObject = {"date": dateText}; 
        var JSONstring = JSON.stringify(JSONObject); 
        sendUpdate(JSONstring); 
        }, 
        dateFormat: 'dd-mm-yy' 
      }); 

     }); 

     </script> 

Et le code PHP:

private function handleReceivedJSon($json){ 
    $this->jsonLocal=array(); 
    $json=$_POST["json"]; 
    $this->jsonDecoded= json_decode($json, true); 
    if(isset($this->jsonDecoded["date"])){ 
     $_SESSION["date"]=$this->jsonDecoded["date"]; 
     $this->useddate=$this->jsonDecoded; 

    } 
    if(isset($this->jsonDecoded["logout"])){ 
     session_destroy(); 
     exit("logout"); 
    } 
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT"); 
    header("Cache-Control: no-cache, must-revalidate"); 
    header("Pragma: no-cache"); 
    header("Content-Type: text/xml; charset=utf-8"); 
    exit($json); 
} 

Répondre

0

Je ne sais pas si j'ai raison. Mais il semble que vous utilisiez des commandes JQuery sans implémenter JQuery. Si oui, alors vos commandes ajax sont inutiles.

$(document).ready(function(){ 
.... 
}); 

Fonction JQuery typique.

Jetez un oeil à www.visualjquery.com

0

Juste une question ici, vous migrez une application héritage à jquery?

Je voudrais tout d'abord se débarrasser de la « Ajax » appelle ici pour nettoyer ça soit dans jquery

$(...).ajax(...) 

ou prototype

ajax = new Ajax.Request(...) 

alors quand la réponse est de retour que pour analyser/eval la `

response.responseText 
response.responseText.evalJSON() 

etc ...

Questions connexes