将PHPvariables传递给Javascript的最佳方式是什么?

我目前在隐藏的input字段中回显某些variables,并在需要时用Javascript读出它们。

我和一个同事现在正在考虑用PHP生成一个额外的Javascript文件,其中只包含所有的Javascriptvariables。 这样,variables已经存在,并且在HTML中没有额外的代码。

将variables从PHP传递给Javascript的好方法是什么? 我们的解决scheme听起来如何?

一般数据传递

JSON是一种常用的JavaScript交换格式,使用json_encode 。 一个像这样的PHP文件:

 <?php $data = array("test" => "var", "intvalue" => 1); echo json_encode($data); ?> 

然后返回一个像这样的JavaScript对象字面值:

 { "test" : "var", "intvalue" : 1 } 

您可以直接将其回显到页面上的JavaScriptvariables中,例如:

 var data = <?php echo json_encode($data)?>; 

…或通过Ajax请求(例如使用jQuery的getJSON )。

输出到标签上的属性

如果你只需要输出一个string到一个标签的属性,使用htmlspecialchars 。 假设一个variables:

 <?php $nifty = "I'm the nifty attribute value with both \"double\" and 'single' quotes in it."; ?> 

…你可以这样输出:

 <div data-nifty-attr="<?php echo htmlspecialchars($nifty)?>">...</div> 

…或者如果您使用短标签:

 <div data-nifty-attr="<?= htmlspecialchars($nifty)?>">...</div> 
 <?php $my_php_var = array(..... big, complex structure.....); ?> <script type="text/javascript"> my_js_var = <?=json_encode ($my_php_var)?>; </script> 

我使用它们在HTML的头部一起回显它们。 似乎足够干净,我的需要:)

有三种方法可以做到这一点:

  • 将它们直接回复到javascript源代码中: <?echo "var user = '$user';";?> 。 工程,但它是凌乱的。
  • 通过ajax请求传入。 这是最接近本地variables传递,但缺点是它需要一个额外的HTTP请求。
  • 你正在做什么,通过生成隐藏的表单字段,然后阅读它们来传递它们。