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

如何在客户端存储php数组?,php,javascript,jquery,json,dom,Php,Javascript,Jquery,Json,Dom,我正在从mysql数据库中提取一个数组。一个非常简单的select语句,然后将其放入普通多维数组(行和列)中生成一些HTML。到目前为止还不错 我希望能够将该数组存储在客户端的某个位置(DOM?),以便客户端可以(通过jQuery)重用和操作该数据,而无需每次都重新查询数据库中的相同数据 所以。。。假设我的php数组是: $fruits = array ( "fruits" => array ( "a" => "orange",

我正在从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重复使用命令上的数据?

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

服务器端:

<input type="hidden" id="FruitData" value="<?php echo htmlentities( json_encode( $fruits ) );?>" />
var fruits = $.parseJSON( $( '#FruitData' ).val() );
你可以把它放在任何你喜欢的地方,真的,我只是喜欢输入。输入对于将数据发送回服务器也很方便(甚至可以通过AJAX以外的方法)。饼干也可以。不过,我确实避免了直接输出到脚本块中。我不喜欢我的语法编辑器在JS中对PHP的处理方式,它通常会导致大量全球化的代码,当需要将脚本移动到外部文件时,它会妨碍我


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

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

服务器端:

<input type="hidden" id="FruitData" value="<?php echo htmlentities( json_encode( $fruits ) );?>" />
var fruits = $.parseJSON( $( '#FruitData' ).val() );
你可以把它放在任何你喜欢的地方,真的,我只是喜欢输入。输入对于将数据发送回服务器也很方便(甚至可以通过AJAX以外的方法)。饼干也可以。不过,我确实避免了直接输出到脚本块中。我不喜欢我的语法编辑器在JS中对PHP的处理方式,它通常会导致大量全球化的代码,当需要将脚本移动到外部文件时,它会妨碍我


此外,只要您向较旧的浏览器提供,您就可以用
JSON.parse
替换
$.parseJSON
一种方法,也是我们(我们公司)以前使用过的一种方法,就是在页面上隐藏的
div
中将该数据作为JSON进行回显。然后结合使用jQuery的
.text()
方法和
JSON.parse()
在客户端以JSON的形式获取数据

大概是这样的:

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

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

大概是这样的:

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

将其存储为一个简单的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>
//yourphpfile.php
var obj=JSON.parse(“”);
控制台日志(obj);

客户端将把整个数据存储到
obj
对象中。

如何将其存储为一个简单的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>
//yourphpfile.php
var obj=JSON.parse(“”);
控制台日志(obj);

客户端将全部数据放入 OBJ对象.

,实际上,这是一个问题,并且是“不安全的”(但我留下这个答复作为参考,以及暴露我先前没有考虑的缺陷):

如果JSON的输出中出现“”(这是完全合法的),则HTML无效

EDIT:
json\u encode
采用可选的
json\u HEX\u标记
,可防止上述情况发生。确保根据上下文的需要使用正确的输出转义


(和以前的东西…)

我将和其他人一样给出同样的答案

…使用
json\u encode
或类似/更好的json编码机制。这将导致JSON——JSON是JavaScript对象文本子集的文本表示。这个JSON(除非JSON_encode被破坏)保证在JavaScript中是100%有效的无副作用的表达式

…只有一个例外:只需按原样使用有效的JS表达式。

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

快乐编码

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

如果JSON的输出中出现“”(这是完全合法的),则HTML无效

EDIT:
json\u encode
采用可选的
json\u HEX\u标记
,可防止上述情况发生。确保根据上下文的需要使用正确的输出转义


(和以前的东西…)

我将和其他人一样给出同样的答案

…使用
json\u encode
或类似/更好的json编码机制。这将导致JSON——JSON是JavaScript对象文本子集的文本表示。这个JSON(除非JSON_encode被破坏)保证在JavaScript中是100%有效的无副作用的表达式

…只有一个例外:只需按原样使用有效的JS表达式。

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

快乐编码

如果从PHP输出中删除双引号,则无需调用JSON.parse。不过,我不希望PHP在JS块中输出。当我准备将脚本移动到外部文件时,它会妨碍我。谢谢,但我很好奇这个脚本的可重用性?这是一种简单的方法,但其他答案似乎会将其与页面上的隐藏div或输入字段结合使用,而您不会这样做。@JAAulde:是的,但是
JSON.parse
肯定是一种安全的方法。如果PHP响应被我的邪恶(:P)同事修改为类似
{“a”:“b};剂量学():-)@themerlinproject:它确实是可重用的。你可以用这个