2009-08-27 13 views
4

Y at-il quelque chose de spécial que je dois faire à un objet JSON avant de l'envoyer avec AJAX? Mon code ressemble à ceci:Envoyer JSON avec AJAX

runAjax(JSON.stringify(data)); 

}

function runAjax(JSONstring) 
{ 
    ajax = getHTTPObject(); 
    var params = "?data=" + JSONstring; 
    ajax.open("POST", "createtrip.php", true); 
    ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    ajax.setRequestHeader("Content-length", params.length); 
    ajax.setRequestHeader("Connection", "close"); 
    ajax.onreadystatechange = serverSpeaks; 
    ajax.send(params); 
} 

En ce moment, le serveur ne reçoit pas les données. Je reçois la valeur null du côté serveur mais le côté client JSONString est défini. Y a-t-il quelque chose que je fais de mal?

+0

vous pouvez vérifier avec Firebug si vous avez une erreur ou appelez au serveur –

Répondre

5

Vous envoyez des données sur le POST, vous n'avez pas besoin le caractère '?' au début de la variable params, aussi je vous recommande de encode le JSONString pour éviter problèmes.

Notez que vous manquez la déclaration var pour la variable ajax, c'est déclarant globalement (window.ajax) et je pense que vous ne avez pas besoin dans le monde ...

function runAjax(JSONstring) { 
    var params = "data=" + encodeURIComponent(JSONstring), 
     ajax = getHTTPObject(); 

    ajax.open("POST", "createtrip.php", true); 
    ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    ajax.setRequestHeader("Content-length", params.length); 
    ajax.setRequestHeader("Connection", "close"); 
    ajax.onreadystatechange = serverSpeaks; 
    ajax.send(params); 
} 
+0

mon instruction var est au début du fichier comme J'utilise si pour d'autres choses. – Dan

+0

Je sais que c'est environ trois ans après le fait ... mais dans la portée de JavaScript est en ce qui concerne la fonction. L'utilisation de 'var' par CMS est donc tout à fait appropriée. Je voulais juste le signaler à quiconque pourrait se demander pourquoi il était là. La portée de JS est un peu différente des autres langues auxquelles nous sommes habitués. – Tim

+0

Il vaudrait mieux supprimer ces deux lignes: ajax.setRequestHeader ("Content-length", params.length); ajax.setRequestHeader ("Connexion", "fermer"); –

0

Vous devez passer par un encodeur pour envoyer les données correctement. Bien sûr, vous devez d'abord voir que la variable "data" est bien formée en "JSON".

lib to encode/decode

autre lien encode/decode

0

Le serveur peut gérer le corps du message comme nom1 = valeur & nom2 = valeur2.

Si vous utilisez PHP, vous pouvez recevoir la chaîne JSON par:

$data = file_get_contents("php://input"); 
+0

Mais peut-il faire face à "? Data = value"? – seth

+0

Avez-vous essayé de surveiller le trafic HTTP en utilisant firebug ou wireshark? Ils peuvent vous donner plus d'informations sur cette requête Ajax. –

Questions connexes