J'essaie de transmettre un tableau Javascript multidimensionnel à une autre page de mon site en:
en utilisant JSON.stringify sur le tableau
attribution de la valeur résultante à un champ de saisie
poster ce champ sur la deuxième page
en utilisant json_decode sur la valeur publiée
puis var_dump pour tester
(faisant directement écho à la variable postée juste pour voir si elle est passée du tout)
Javascript sur la première page:
var JSONstr = JSON.stringify(fullInfoArray);
document.getElementById('JSONfullInfoArray').value= JSONstr;
php sur la page deux:
$data = json_decode($_POST["JSONfullInfoArray"]);
var_dump($data);
echo($_POST["JSONfullInfoArray"]);
L'écho fonctionne bien mais var_dump renvoie NULL
Qu'est ce que j'ai mal fait?
Cela m'a arrangé:
$postedData = $_POST["JSONfullInfoArray"];
$tempData = str_replace("\\", "",$postedData);
$cleanData = json_decode($tempData);
var_dump($cleanData);
Je ne suis pas sûr de savoir pourquoi mais le message venait avec un groupe de "\" caractères séparant chaque variable de la chaîne
Nous l'avons compris en utilisant json_last_error()
, telle que proposée par Bart, qui a renvoyé JSON_ERROR_SYNTAX
Vous devrez vérifier le contenu de $_POST["JSONfullInfoArray"]
. Si quelque chose n'analyse pas, json_decode
Renverra simplement null
. Ce n'est pas très utile alors quand null
est retourné, vous devriez vérifier json_last_error()
pour obtenir plus d'informations sur ce qui n'a pas bien fonctionné.
Lorsque vous utilisez JSON stringify, utilisez d'abord html_entity_decode avant json_decode.
$tempData = html_entity_decode($tempData);
$cleanData = json_decode($tempData);
Lorsque vous enregistrez des données à l'aide de JSON.stringify () et que vous devez ensuite les lire en php. Le code suivant a fonctionné pour moi.
json_decode( html_entity_decode( stripslashes ($jsonString ) ) );
Merci à @Thisguyhastwothumbs
stripslashes(htmlspecialchars(JSON_DATA))
Aucune des autres réponses n'a fonctionné dans mon cas, probablement parce que le tableau JSON contenait des caractères spéciaux. Ce qui l'a corrigé pour moi:
Javascript (ajouté encodeURIComponent)
var JSONstr = encodeURIComponent(JSON.stringify(fullInfoArray));
document.getElementById('JSONfullInfoArray').value = JSONstr;
PHP (inchangé de la question)
$data = json_decode($_POST["JSONfullInfoArray"]);
var_dump($data);
echo($_POST["JSONfullInfoArray"]);
Echo et var_dump ont été vérifiés pour un échantillon de plus de 2000 jeux de données entrés par l'utilisateur comprenant un champ URL et un champ de texte long et renvoyant la valeur NULL sous var_dump pour un sous-ensemble comprenant des URL avec les caractères ?&#
.
jsonText = $_REQUEST['myJSON'];
$decodedText = html_entity_decode($jsonText);
$myArray = json_decode($decodedText, true);`