2009-09-04 28 views
7

JSONデータを解析してGoogleマップにプロットするJavascriptを使用してPHPスクリプトに送信する多次元配列があります。PHPからJSONでエンコードされた変数をPOST経由で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関数に渡したかったのです(下記の更新を参照してください)。

UPDATE:は私も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

答えて

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オブジェクトであり、それ以上解析する必要はありません。私はのnameプロパティで指定されたオブジェクト$objを持っていた場合は「こんにちは」、私はこれを行うことができます:

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

と「こんにちは」という警告を取得します。 json_encodeの出力は、完全に適切なjavascriptオブジェクトです。

$_POST配列の出力がスラッシュでエスケープされているということは、あなたのmagic_quotes_gpcディレクティブがオンに設定されている可能性があります。その場合、$ _POST変数をstripslashes()でエスケープする必要があります。

+0

ありがとう!私はjson-target.phpで出力を取得することができましたが、今はJSONオブジェクトがマングリングされています。私は正しいアプローチをしていますか? – Francis

3

私はしばらく答えを見つけました。試してください:

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

var json = JSON.parse($( '#jsonarray'))val()); アラート(json.plate_no [0]);

+0

ようこそStackOverflowへ!あなたの答えにいくつかの説明を加えてください。ありがとうございました! – Aurasphere

関連する問題