2009-09-04 10 views
7

Ich habe ein mehrdimensionales Array, das ich an ein PHP-Skript mit einem Javascript senden möchte, das die JSON-Daten analysiert und in Google Maps plottet. Ich versuche, es zu simulieren Formen mit:JSON-codierte Variable von PHP nach Javascript über POST übergeben

<?php 
    print "The value of \$_POST is "; 
    print_r($_POST); 
?> 

Und die Ausgabe von $_POST ist Array ([jsonarray] => [{):

<?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 &rarr;"></p> 
</form> 

json-target.php sieht wie folgt aus. Ich wollte den Inhalt der Variablen $jsonarray an eine Javascript-Funktion übergeben (siehe Update unten).

UPDATE: ich auch ein einfaches Javascript haben, die von dem Wert analysieren $_POST und buchen Sie den Wert über alert() empfangen angenommen hat:

<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> 

Aber der Ausgang ist mit umgekehrten Schrägstrich Zeichen verstümmelt.

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\"}]); 

Was ist ein besserer Weg, dies zu tun?

+0

Was genau ist die Frage? – rojoca

Antwort

12

JSON-Codierung verwendet umfangreiche Anführungszeichen. Indem Sie einfach eine JSON-codierte Zeichenfolge in Ihr HTML-Attribut value ausgeben, stören die Anführungszeichen das Markup. Sie müssen maskiert werden, um in den HTML-Code eingefügt zu werden. Versuchen Sie folgendes:

<input type="hidden" name="jsonarray" value="<?php echo htmlspecialchars($jsonarray,ENT_QUOTES); ?>" id="jsonarray"> 

Edit: Als Reaktion auf das Update, ich bin nicht sicher, was Ihr JSON.parse tun werden soll. Alles, was mit json_encode() in PHP codiert ist, ist technisch ein gültiges Javascript-Objekt und muss nicht weiter analysiert werden. Wenn ich ein Objekt mit dem Namen $obj mit einem Namen Eigenschaft ‚Hallo‘ hatte, kann ich dies tun:

<script type="text/javascript"> 
var o = <?php echo json_encode($obj); ?>; 
alert(o.name); 
</script> 

und eine Benachrichtigung erhalten zu sagen ‚Hallo‘. Die Ausgabe von json_encode ist ein perfekt geeignetes JavaScript-Objekt.

Die Tatsache, dass die Ausgabe Ihrer $_POST Array mit Schrägstrichen entkommen war, führt mich zu der Annahme, dass Ihre magic_quotes_gpc Direktive eingeschaltet ist. Wenn das der Fall ist, müssen Sie Ihre $ _POST-Variablen mit stripslashes() entschlüsseln.

+0

Danke! Ich konnte die Ausgabe in json-target.php bekommen, aber jetzt ist das JSON-Objekt verstümmelt. Mache ich den richtigen Ansatz? – Francis

3

Ich brauchte eine Weile, um die Antwort zu finden. Versuchen Sie:

var json = JSON.parse(<?php echo stripslashes($_POST['jsonarray']) ?>); 
0

var json = JSON.parse ($ ('# jsonarray'). Val()); Warnung (json.plate_no [0]);

+0

Willkommen bei StackOverflow! Bitte überlege, ob du deiner Antwort eine Erklärung hinzufügen möchtest. Vielen Dank! – Aurasphere

Verwandte Themen