En passant JSON codé de la variable PHP à Javascript via la POSTE
J'ai un tableau multidimensionnel que je veux envoyer à un script PHP avec un Javascript qui analyse les données JSON et le tracé sur Google Maps. Je suis en train de les simuler à l'aide de formulaires:
<?php
$jsontest = array(
0 => array(
'plate_no' => 'abc111',
'longlat' => array(121.003895,14.631563),
'info' => 'first item'
),
1 => array(
'plate_no' => 'abc222',
'longlat' => array(121.103895,14.731563),
'info' => 'second item'
)
);
$jsonarray = json_encode($jsontest);
?>
<form action="json-target.php" method="post" accept-charset="utf-8">
<input type="hidden" name="jsonarray" value="<?php echo $jsonarray; ?>" id="jsonarray">
<p><input type="submit" value="Continue →"></p>
</form>
json-target.php ressemble à ceci:
<?php
print "The value of $_POST is ";
print_r($_POST);
?>
Et la sortie de $_POST
est Array ( [jsonarray] => [{ )
. Je voulais passer le contenu de la $jsonarray
variable à une fonction Javascript (voir la mise à jour ci-dessous).
Mise à JOUR: j'ai aussi un simple Javascript qui est censé analyser la valeur reçue de $_POST
et d'afficher la valeur par alert()
:
<script src="/js/json2.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" charset="utf-8">
var json = JSON.parse(<?php echo $_POST['jsonarray'] ?>);
for (var i = 0; i < json.length; i++) {
alert(json[i]);
}
</script>
Mais la sortie est mutilé avec des barres obliques inverses.
var json = JSON.parse([{\"plate_no\":\"abc111\",\"longlat\":[121.003895,14.631563],\"info\":\"first item\"},{\"plate_no\":\"abc222\",\"longlat\":[121.103895,14.731563],\"info\":\"second item\"}]);
Ce qui est une meilleure façon de faire cela?
Quelle est exactement la question?
OriginalL'auteur Francis | 2009-09-04
Vous devez vous connecter pour publier un commentaire.
Encodage JSON fait un large usage des guillemets. Simplement en sortie d'une chaîne encodée JSON dans votre code HTML
value
attribut, les citations d'interférer avec le balisage. Ils ont besoin d'être échappé à mettre dans le HTML. Essayez ceci:Edit: En réponse à votre mise à jour, je ne suis pas sûr de ce que votre JSON.analyser est censé faire. Rien codé avec
json_encode()
en PHP est techniquement valide d'un objet Javascript, et n'a pas besoin d'être analysée plus loin. Si j'avais un objet nommé$obj
avec un nom de propriété de "bonjour", je pourrais faire ceci:et vous recevrez une alerte disant "bonjour". La sortie de json_encode est parfaitement adapté objet javascript.
Le fait que la sortie de votre
$_POST
tableau a été échappé avec des barres obliques m'amène à penser que peut-être votre magic_quotes_gpc directive est définie pour être sur. Si c'est le cas, vous aurez à ne pas encoder votre $_POST variables avecstripslashes()
.OriginalL'auteur zombat
M'a fallu un certain temps pour trouver la réponse. Essayez:
OriginalL'auteur srkleiman
var json=JSON.parse($('#jsonarray').val());
alert (json.plate_no[0]);
OriginalL'auteur ayumixlain