如何在客户端存储php数组?

时间:2011-04-06 04:11:27

标签: php javascript jquery json dom

我从mysql数据库中提取数组。一个非常简单的select语句,然后放入您的普通多维数组(行和列)以生成一些HTML。到目前为止一切都很好。

我希望能够在客户端某处(DOM?)存储该数组,以便客户端可以重新使用和操作该数据(通过jQuery),而无需为每个数据库重新查询相同的数据时间。

所以......让我说我的php数组是:

$fruits = array ( "fruits"  => array ( "a" => "orange",
                                       "b" => "banana",
                                       "c" => "apple"
                                     ),
                  "numbers" => array ( 1,
                                       2,
                                       3,
                                       4,
                                       5,
                                       6
                                     ),
                  "holes"   => array (      "first",
                                       5 => "second",
                                            "third"
                                     )
                );

如何在客户端存储$fruits,以便通过javascript重新使用命令数据?

4 个答案:

答案 0 :(得分:5)

使用json_encode将$ fruits序列化为JSON,然后将其写入类似隐藏输入的内容。使用jQuery,您可以在DOM中查询输入并查询其值$.parseJSON

服务器端:

<input type="hidden" id="FruitData" value="<?php echo htmlentities( json_encode( $fruits ) );?>" />

客户端:

var fruits = $.parseJSON( $( '#FruitData' ).val() );

你可以把它放在任何你喜欢的地方,真的 - 我只是喜欢输入。输入也很方便将数据传送回服务器(通过AJAX以外的方法,甚至)。 Cookies也会起作用。我确实避免直接输出到脚本块。我不喜欢我的语法编辑器如何在JS内部对PHP产生影响,它经常会导致很多全局化的代码,并且在将脚本移动到外部文件时它会妨碍我。

此外,只要您向旧浏览器提供JSON API,就可以将$.parseJSON替换为JSON.parse

答案 1 :(得分:4)

如何将其存储为简单的JavaScript对象?如下所示:

//yourphpfile.php
<script type="text/javascript">
var obj = JSON.parse('<?php echo json_encode($my_arr,JSON_HEX_TAG|JSON_HEX_APOS); ?>');
console.log(obj);
</script>

客户端将把整个数据放入obj对象。

答案 2 :(得分:1)

我们(我们公司)之前使用过的一种方法是将该数据作为JSON在页面上的隐藏div中回显。然后结合使用jQuery的.text()方法和JSON.parse()将数据作为JSON在客户端获取。

这样的事情:

echo "<div id = 'fruits' style = 'display:none;'>".json_encode($fruits)."</div>";

然后在Javascript中:

var fruits = JSON.parse($("#fruits").text());

console.log(fruits.fruits.a); // orange 

答案 3 :(得分:0)

实际上,这有一个问题并且“不安全”(但我留下这个回复以供参考,并揭露我之前没有考虑的缺陷):

如果'&lt; / script&gt;'出现在JSON的输出中(这是完全合法的)然后HTML无效。

编辑: json_encode采用可选的JSON_HEX_TAG,以防止出现上述情况。 请务必根据上下文的要求使用正确的输出转义。


(以前的东西......)

我将和其他人一样回答相同的答案......

...使用json_encode或类似/更好的JSON编码机制。这应该导致JSON - JSON是JavaScript对象文字子集的文本表示。然后这个JSON(除非json_encode被破坏)保证在JavaScript中是100%有效的无副作用表达式

......但有一个例外:按原样使用-valid-JS-expression。

# Look, no added nonsense.
var blah = <?= json_encode($my_arr); ?>;

非常不可能在使用好的设计之前,必须将JSON推入元素属性。 (例如,可能不需要从存储的值中进行任何“解析”;在发出代码时利用JavaScript和后端与前端之间的执行顺序。)

请花点时间考虑处理过程中的不同阶段。例如,以下是错误的

var blah = ParseJson("<?= json_encode($my_arr); ?>;")

这是错误的,因为在运行PHP之后,返回到浏览器的结果HTML可能是:

var blah = ParseJson("{"hello": "world"}")

快乐编码