2009-11-19 4 views
1

J'envoie un objet JSON PHP en utilisant jQuery viaConsommant objet JSON en PHP, envoyé de jQuery

$.ajax({ 
    url: myURL, 
    type: 'POST', 
    contentType: "application/json; charset=utf-8", 
    data: myData, 
    processData: false, 
    dataType: 'html',  
    async: false, 
    success: function(html) { 
     window.console.log(html); 
    } 
});  

et en essayant de décoder l'objet JSON en utilisant

$GLOBALS["HTTP_RAW_POST_DATA"]; 

mais le contenu variable sont imprimés comme

[object Object] 

avec json_decode() retournant NULL (bien sûr).

Des idées ce que je dois faire pour obtenir les données JSON réelles?

Merci, Gaz.

+0

Quel est le contenu de myData? Pouvez-vous produire (en utilisant firebug, par exemple) que pour vous assurer qu'il a le bon contenu (et afficher les résultats)? – jonstjohn

+0

Je l'ai imprimé en utilisant window.console.log et c'est correct. – Gaz

+0

objet ar: Array contenu: "Quelques autres données de test" de link_title: "" titre: "" en: Array contenu: "Mes données de test" link_title: "" titre: "" – Gaz

Répondre

4

On dirait que vous envoyez une chaîne au PHP. Par défaut, Jquery envoie les données dans un format postal normal. PHP peut lire ces données très bien. Je recommanderais simplement d'obtenir les données dont vous avez besoin hors du tableau POST.

Si vous essayez de sérialiser un objet Javascript via JSON et de le convertir ensuite en un objet du côté PHP, vous pouvez alors utiliser la route JSON. Vous aurez besoin d'un plugin pour convertir les données d'une chaîne en JSON. Vous pouvez envisager: http://code.google.com/p/jquery-json/

vous changeriez la ligne:

data: myData, 

Pour:

data: $.toJSON(myData), 

Puis sur le côté PHP, vous recevrez toujours les données dans le tableau de poste et vous pouvez le convertir avec la commande suivante:

$params = json_decode($_POST[]); 
+0

OK, ça marche maintenant. Un problème supplémentaire était l'utilisation de clés non numériques dans un tableau javascript. Utilisé $ .toJSON et changé en clés numériques et cela fonctionne. Par ailleurs, je n'ai pas utilisé $ _POST mais utilisé contentType: "application/json; jeu de caractères = utf-8", et processData: false, puis décodé le JSON de $ GLOBALS ["HTTP_RAW_POST_DATA"]. Cheers, Gaz. – Gaz

-1

Utilisez file_get_contents('php://input') à la place $GLOBALS["HTTP_RAW_POST_DATA"];

+0

pourquoi? ......... 1 .... –

+0

Les deux sont équivalents quand même. – Gaz

0

Avez-vous essayé d'utiliser $ _POST?

Je poignée toutes mes demandes JSON plus ou moins comme ceci:

$params = json_decode($_POST[]); 
+0

Le résultat est le même, un tableau vide. – Gaz

1

On dirait que vous ne pas envoyer un objet JSON à votre script php, juste la chaîne « objet Object ».

+0

Oui, je peux voir ça! Savez-vous ce que je dois modifier dans l'appel jQuery AJAX pour faire autrement? Merci, Gaz. – Gaz

-1

Vous avez défini votre type de données sur 'html' dans votre appel ajax. Ne devrait-il pas être "json"? Je pense que votre bel objet JSON est condensé dans une chaîne vide de sens.

+0

dataType -> Type de données que vous attendez du serveur. – Karsten

0

Vous envoyez actuellement une chaîne via POST. Je recommande d'utiliser JSON2 pour stringifier votre objet Javascript. Utiliser

var myData = JSON.stringify (monObjet, remplaceur);