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にエコーする方が好ましいという特別な理由はありますか?
あなたの場合、$json_obj
はすでに文字列です。したがって、それは必要ありません。しかし、あなたがjavascript json_encode
に渡したい配列を持っているなら、これであなたを助けます。
データ(JSON)でもコードでも、サーバーからクライアントに送信するものによって異なります。
2つのアプローチ:
サーバー上のJSONファイルをエコーします。次に、JSONドキュメントを印刷し、レスポンスContent-Type
をapplication/json
に設定します。このように、$.get
やraw XMLHttpRequest
など、必要な任意のAJAXライブラリを使用できます。これは、データを渡す方法です。
サーバーでJavaScriptコードをエコーし、$.getScript
を使用してそれをロードします。コードを渡す方法です。コードにはJSONだけでなく任意のコードを含めることができるため、これは安全性が低下する可能性があります。そのため、攻撃者がサーバーを危険にさらすことができる場合、リモート実行のために任意のクライアントにコードをプッシュすることができる可能性があります。
データのみを渡す場合は、最初のアプローチを使用します。よりクリーンで安全です。
さらに、異なる環境、たとえば異なるプログラミング言語でフロントエンドを作成することになった場合、同じJSONを返すエンドポイントを再利用することができます。 JavaScriptコードを返すと、さらに難しくなります。
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 );
特定の問題についてはやり過ぎのように思えるかもしれませんが、私はjson_encode/parseオプションを引き続き使用します。どうして?あなたが尋ねる。まあ、それは重複を避けると考えてください。エンコード/解析する場合、PHPコードで簡単に読み取り可能なオブジェクトに定数を保持できます。そしてあなたのJSコードについても同じです。
それは単にそれをいじる必要性を排除します。
json_encode()
の引数は、PHPデータ構造であり、すでにJSON形式の文字列ではありません。PHP Javascriptのオブジェクト。
json_encode
は、PHP配列をJSON文字列などに変換する関数です。$json_obj
変数はalready JSONなので文字列、それ以上の変換は必要なく、単純にそれをエコーすることができます。
配列から$json_obj
文字列を取得するには、コードは次のようになります。
$json_array = array(
"const1" => "val",
"const2" => "val2"
);
$json_obj = json_encode($json_array);
通常これが私がすることであり、私が見つけた最も安全な方法です:
// 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);
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, ....
あなたが使う json_encode
文字列ではなくphp配列を使用する場合:
$array = array("const1" => "val", "const2" => "val2");
echo json_encode($array);
文字列に対してjson_encodeを呼び出すと、次のようになります。
"{\"const1\": \"val\", \"const2\": \"val2\"}"