web-dev-qa-db-ja.com

PHP JSONをJavaScriptに渡す:echo json_encode vs echo json宣言

JSONを使用して定数を格納し、phpとjavascriptの間で共有する共通の定数ファイルを作成しようとしています。しかし、なぜJSONをPHPからjson_encode()を使用してJavaScriptに渡し、json宣言をエコーするのではないか)と思います。

PHP JSON

_<?php 

$json_obj = '{"const1": "val",
            "const2": "val2"             
                            }';

?>
_

グーグル、それはJavaScriptに戻す典型的な方法が使用しているようです

_<?php echo json_encode($json_obj); ?>
_

次に、phpファイルを読み取って_$json_obj_を取得するために$.getScript()のようなものを使用し、parseJSON()を使用してJavaScriptで使用できるようにする必要があると思います。

しかし、代わりに

_<?php  echo 'var json = '.$json_obj; ?>
_

このようにすれば、スクリプトを直接ロードするだけで、jsonを直接使用する準備ができます。

json_encode()を使用してから宣言をJavaScriptにエコーする方が好ましいという特別な理由はありますか?

9
roverred

あなたの場合、$json_objはすでに文字列です。したがって、それは必要ありません。しかし、あなたがjavascript json_encodeに渡したい配列を持っているなら、これであなたを助けます。

7
Tobias Golbs

データ(JSON)でもコードでも、サーバーからクライアントに送信するものによって異なります。

2つのアプローチ:

  1. サーバー上のJSONファイルをエコーし​​ます。次に、JSONドキュメントを印刷し、レスポンスContent-Typeapplication/jsonに設定します。このように、$.getやraw XMLHttpRequestなど、必要な任意のAJAXライブラリを使用できます。これは、データを渡す方法です。

  2. サーバーでJavaScriptコードをエコーし​​、$.getScriptを使用してそれをロードします。コードを渡す方法です。コードにはJSONだけでなく任意のコードを含めることができるため、これは安全性が低下する可能性があります。そのため、攻撃者がサーバーを危険にさらすことができる場合、リモート実行のために任意のクライアントにコードをプッシュすることができる可能性があります。

データのみを渡す場合は、最初のアプローチを使用します。よりクリーンで安全です。

さらに、異なる環境、たとえば異なるプログラミング言語でフロントエンドを作成することになった場合、同じJSONを返すエンドポイントを再利用することができます。 JavaScriptコードを返すと、さらに難しくなります。

5
kamituel

Passing PHP JSONからJavaScriptへと読み取り
var stuff = <?php print json_encode($datajson); ?>; var arr = new Array(); arr= JSON.parse(stuff); document.write((arr[0].cust_code );

3
Kashinath Patil

特定の問題についてはやり過ぎのように思えるかもしれませんが、私はjson_encode/parseオプションを引き続き使用します。どうして?あなたが尋ねる。まあ、それは重複を避けると考えてください。エンコード/解析する場合、PHPコードで簡単に読み取り可能なオブジェクトに定数を保持できます。そしてあなたのJSコードについても同じです。

それは単にそれをいじる必要性を排除します。

1
Luc

json_encode()の引数は、PHPデータ構造であり、すでにJSON形式の文字列ではありません。PHP Javascriptのオブジェクト。

0
Barmar

json_encodeは、PHP配列をJSON文字列などに変換する関数です。$json_obj変数はalready JSONなので文字列、それ以上の変換は必要なく、単純にそれをエコーすることができます。

配列から$json_obj文字列を取得するには、コードは次のようになります。

$json_array = array(
    "const1" => "val",
    "const2" => "val2"
);

$json_obj = json_encode($json_array);
0
SixteenStudio

通常これが私がすることであり、私が見つけた最も安全な方法です:

// holds variables from PHP
var stuff = {};
try {
    // stuff will always be an object
    stuff = JSON.parse('<?php echo empty($stuff) ? '{}' : json_encode($stuff) ?>');
} catch (e) {
    if (e instanceof SyntaxError)
    {
        // report syntax error
        console.error("Cannot parse JSON", e);
    }
}
// show resulting object in console
console.log("stuff:", stuff);
0
3k-

constant.php

<?php
$array = array("const1" => "val", "const2" => "val2");
?>
<script>
var contants = <?php echo json_encode($array); ?>
</script>

====================== END OF FILE constant.php =======

Phpでは、次を使用してアクセスできます

$array["<key>"]

JavaScriptでは、次を使用してアクセスできます

contants.const1, ....
0
RONE

あなたが使う json_encode文字列ではなくphp配列を使用する場合:

$array = array("const1" => "val", "const2" => "val2");

echo json_encode($array);

文字列に対してjson_encodeを呼び出すと、次のようになります。

"{\"const1\": \"val\", \"const2\": \"val2\"}"
0
jcubic