2009-09-04 94 views
7

我有一個多維數組,我想用Javascript解析JSON數據並將其繪製到Google地圖上,以發送到PHP腳本。我試圖用形式來模擬它:通過POST將JSON編碼的變量從PHP傳遞到Javascript

<?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看起來是這樣的:

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

$_POST輸出Array ([jsonarray] => [{)。我想將$jsonarray變量的內容傳遞給Javascript函數(請參見下面的更新)。

更新:我也有一個本應通過alert()解析從$_POST收到的價值,並張貼值的簡單的Javascript:

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

但輸出錯位與反斜槓字符。

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

這樣做的更好方法是什麼?

+0

究竟是什麼問題? – rojoca 2009-09-04 04:55:35

回答

12

JSON編碼大量使用引號。通過簡單地將JSON編碼的字符串輸入到HTML value屬性中,引號將會干擾標記。他們需要被轉移到HTML中。試試這個:

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

編輯:針對您的更新,我不知道你的JSON.parse是應該做的事情。在PHP中使用json_encode()編碼的東西在技術上是一個有效的Javascript對象,不需要進一步解析。如果我有一個名爲$obj的物體的名稱屬性「你好」,我可以這樣做:

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

,並得到一個警告說「你好」。 json_encode的輸出是一個完美的javascript對象。

您的$_POST數組的輸出已被斜槓轉義的事實導致我認爲可能您的magic_quotes_gpc指令設置爲打開。如果是這種情況,你必須用stripslashes()取消你的$ _POST變量。

+0

謝謝!我能夠在json-target.php中獲得輸出,但是現在JSON對象被破壞了。我正在做正確的方法嗎? – Francis 2009-09-04 05:35:13

3

花了我一會兒才找到答案。嘗試:

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

var json = JSON.parse($('#jsonarray')。val()); alert(json.plate_no [0]);

+0

歡迎來到StackOverflow!請考慮爲你的答案添加一些解釋。謝謝! – Aurasphere 2016-04-20 12:33:57