如何在客户端存储php数组?
我从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重新使用命令数据?
如何将它存储为一个简单的JavaScript对象? 类似于以下内容:
//yourphpfile.php
客户端将把整个数据放入obj
对象。
使用json_encode将 $ fruits序列化为JSON,然后将其写入类似隐藏输入的内容。 使用jQuery,您可以在DOM中查询输入,在$ .parseJSON中查询其值。
服务器端:
客户端:
var fruits = $.parseJSON( $( '#FruitData' ).val() );
你可以把它放在任何你喜欢的地方,真的 – 我只是喜欢输入。 输入也很方便将数据传送回服务器(通过AJAX以外的方法,甚至)。 Cookies也会起作用。 我确实避免直接输出到脚本块。 我不喜欢我的语法编辑器如何在JS内部对PHP产生影响,它经常会导致很多全局化的代码,并且当需要将脚本移动到外部文件时它会受到影响。
此外,只要您向旧版浏览器提供JSON API ,就可以用JSON.parse
替换$.parseJSON
。
一种方法,也就是我们(我们公司)之前使用过的方法,就是将该数据作为JSON在页面上的隐藏div
中回显。 然后使用jQuery的.text()
方法和JSON.parse()
的组合在客户端获取数据作为JSON。
像这样的东西:
echo "
";
然后在Javascript中:
var fruits = JSON.parse($("#fruits").text()); console.log(fruits.fruits.a); // orange
实际上,这是一个问题,并且“不安全”(但我留下这个回复作为参考,并暴露我之前没有考虑过的缺陷):
如果“ script>”出现在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"}")
快乐的编码