Je prépare et envoie une chaîne JSON de mon fichier PHP à ma fonction Javascript comme ceci:

$json = array();
$json['slice'] = false;
$json['G500'] = false;
$json['KG1'] = false;   

$encoded = json_encode($json);
die($encoded);

Cependant, dans ma fonction JS, si je fais cela, il ne peut pas décoder l'objet JSON:

var d = req.responseText;                                           
var jsonObject = eval(d);

La seule façon, je peux l'obtenir à eval l'objet JSON est d'ajouter des parenthèses manuellement

jsonObject = eval("(" + d + ")");

J'ai aussi le même problème en sens inverse. L'envoi d'un objet JSON à PHP et la tentative de décodage y échoue. Je pense que je devrais supprimer les parenthèses dans mon script PHP avant de tenter de décoder.

Pourquoi cela arrive-t-il? Puis-je faire quelque chose pour contourner cette incompatibilité?

ÉDITER:

PHP vers JS fonctionne maintenant si j'utilise JSON.parse. J'ai toujours des problèmes dans l'autre sens.

Voici comment j'envoie les données au PHP:

var JSONstring = 
{
    "Product": document.getElementById('item').value, 
    "Size": document.getElementById('size').value,
    "Quantity": document.getElementById('quantity').value                                                   
};

url = "maintainOrder.php?json=" + JSON.stringify(JSONstring);

req.open("GET", url, true);

Cependant, le script PHP n'est pas en mesure de le décoder.

$newItem = json_decode($_GET['json']);

array_push($_SESSION['order'],$newItem);
2
xbonez 27 oct. 2011 à 06:15

4 réponses

Meilleure réponse

Pour le problème php vers javascript, reportez-vous à la réponse de Tomalak Geret'kal.

Pour le javascript en php, j'ai peut-être la solution:

Si vous voulez un tableau associatif en php, vous devez passer le paramètre assoc comme true à json_decode (par défaut à false )

Exemple:

$array = json_decode($jsonString, true);

J'ai été mordu plusieurs fois par ceci: par défaut, json_decode essaie de créer un objet s'il reçoit un objet javascript (cela a du sens si vous y pensez) et vous devez le forcer à rendre un tableau associatif si vous avez besoin de ce comportement

3
Eineki 27 oct. 2011 à 02:40

Votre Javascript

eval a un problème avec les premiers { caractères, car d'une ambiguïté avec la portée du bloc.

L'utilisation des parenthèses pour forcer l'analyse de l'entrée en tant qu'expression est une solution, mais vous devez éviter eval complètement et utiliser une fonction de décodage JSON appropriée.


Votre PHP

Nous aurions besoin de voir les données que vous envoyez à votre script PHP pour savoir pourquoi il ne sera pas analysé. En général, tant que JSONLint accepte votre JSON, il en sera de même pour json_decode de PHP. Alors essayez.

4
Community 23 mai 2017 à 10:34

Je pense que vous devez effectuer un traitement de chaîne, tout ce que vous avez à faire est d'écho et de voir le format exact de votre chaîne JSON et assurez-vous qu'il est conforme au format standard, puis utilisez le traitement de chaîne à la fois côté serveur et côté client pour atteindre le effet souhaité

0
samuelagm 27 oct. 2011 à 02:32

Êtes-vous sûr que php n'ajoute pas de barres obliques au texte json ?, essayez d'enregistrer le texte json dans un fichier côté serveur pour vérifier

0
samuelagm 27 oct. 2011 à 02:39