2009-09-04 20 views
7

Ho un array multi-dimensionale che voglio inviare ad uno script PHP con un JavaScript che analizza i dati JSON e tracciare su Google Maps. Sto cercando di simulare utilizzando forme:Passing variabili JSON-encoded da PHP a JavaScript tramite POST

<?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 assomiglia a questo:

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

E l'uscita di $_POST è Array ([jsonarray] => [{). Volevo passare il contenuto della variabile $jsonarray a una funzione Javascript (vedere l'aggiornamento di seguito).

UPDATE: Ho anche un semplice Javascript che dovrebbe analizzare il valore ricevuto da $_POST e inserisci il valore attraverso 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> 

Ma l'uscita è straziato con barre rovesciate.

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

Qual è un modo migliore di farlo?

+0

Qual è esattamente la domanda? – rojoca

risposta

12

La codifica JSON fa ampio uso di virgolette. Inserendo semplicemente una stringa codificata JSON nell'attributo HTML value, le virgolette interferiranno con il markup. Devono essere sfuggiti per essere inseriti nell'HTML. Prova questo:

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

Edit: In risposta alla tua aggiornamento, io non sono sicuro di quello che si suppone il tuo JSON.parse di fare. Qualunque cosa codificata con json_encode() in PHP è tecnicamente un oggetto Javascript valido e non è necessario che sia analizzato ulteriormente. Se avessi un oggetto denominato $obj con una proprietà nome di 'ciao', avrei potuto fare questo:

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

e ottenere un messaggio che dice 'ciao'. L'output di json_encode è un oggetto javascript perfettamente adatto.

Il fatto che l'output dell'array $_POST sia stato sfuggito con barre mi fa pensare che forse la tua direttiva magic_quotes_gpc è impostata per essere attiva. In tal caso, dovrai rimuovere le variabili $ _POST con stripslashes().

+0

Grazie! Sono stato in grado di ottenere l'output in json-target.php ma ora l'oggetto JSON è storpiato. Sto facendo il giusto approccio? – Francis

3

Mi ci è voluto un po 'per trovare la risposta. Prova:

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

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

+0

Benvenuti in StackOverflow! Per favore considera di aggiungere qualche spiegazione alla tua risposta. Grazie! – Aurasphere

Problemi correlati