Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将JSON数据放入html表单输入隐藏?_Javascript_Php_Html_Json - Fatal编程技术网

Javascript 将JSON数据放入html表单输入隐藏?

Javascript 将JSON数据放入html表单输入隐藏?,javascript,php,html,json,Javascript,Php,Html,Json,我正在构建一个使用大量数据的富web应用程序。当我建造它的时候,我发现我在一遍又一遍地重复自己 这就是问题所在。我需要将隐藏的应用程序逻辑放入HTML元素中,以表示客户端正在查看的数据 这是我不久前发现的一个解决方案: <a href="bla" data-itemId="1" .... more data. 此json位于输入[type=hidden]元素中 我试着用json_encode()做同样的事情 但是当我尝试获取值时,我得到了这个{ 我尝试了所有常量,比如JSON\u H

我正在构建一个使用大量数据的富web应用程序。当我建造它的时候,我发现我在一遍又一遍地重复自己

这就是问题所在。我需要将隐藏的应用程序逻辑放入HTML元素中,以表示客户端正在查看的数据

这是我不久前发现的一个解决方案:

<a href="bla" data-itemId="1" .... more data.
此json位于
输入[type=hidden]
元素中

我试着用
json_encode()做同样的事情


但是当我尝试获取值时,我得到了这个
{

我尝试了所有常量,比如
JSON\u HEX\u TAG
,没有发现任何此类问题


如何将JSON正确地放入HTML中,然后使用jquery/javascript获取它?

在您的输入标记中,您正试图将JSON数组放入的值属性中。看看它。您正在放入
。第二个
结束属性值。因此它被解释为
值=“{”
。您需要转义那些
。改用单引号
。然后检查您的字符串是否正确,但它不能在HTML中定义,因为它包含双引号

HTML要求在定义本身包含在双引号中的字符串时转义双引号。正确的方法是使用HTML实体:

value=”“”

来自PHP:

使用
htmlspecialchars
htmlentities
()。在任何情况下,您通常都应该在写入客户端浏览器的每个值上使用此选项(不这样做可能会导致安全风险)

来自Javascript:

如果需要从Javascript执行此操作,可以通过编程设置隐藏元素的值(前提是JSON字符串已包含在Javascript变量中)。这样,您就不必担心字符串文字的编码:

hiddenElement.value=yourString;


为了获得一个可以使用的转义函数,也许可以检查以下线程:。

就我个人而言,我还面临着同样的问题,即在HTML输入标记中使用JSON值进行双引号引用。JSON格式本身包含大量双引号,就像您构建的数组一样。它最后也只提供了“{”值结果

然而,我发现了一个非常简单的方法来解决这个问题。诀窍是使用单引号而不是双引号。以下面的JSP为例:

<input type="checkbox" name="deviceInfo" value='${deviceRow}'>

${deviceRow}是JSON,在本例中包含许多双引号。我使用firebug检查了输入标记的结果,它工作得非常好


对我来说,最好的方法就是使用html

例如,我这样做:

 <input type="hidden" id="v" value="[{&quot;id&quot;:&quot;1&quot;}]" >

而不是

 <input type="hidden" id="v" value="[{"id":"1"}]" >

看来我的答案晚了,但我想为后来的人做出贡献。 在来到这里之前,您已经了解了HTML的概念。使用单引号’不应该这样做,尽管它仍然有效,但这违反了HTML原则。 最好的方法是:使用htmlspecialchars或htmlentities。@jjmont如前所述

我举一个小例子:

<input id="jsondata" value="<?php echo htmlspecialchars( json_encode($data), ENT_COMPAT ); ?>" >
php
设置数组

<input type="checkbox" name="deviceInfo" value="<?php print_r(json_encode(array_filter($array_data), JSON_FORCE_OBJECT));?>" />
?>

谢谢,我最终使用了htmlspecialchars,我希望使用这种方法没有问题……这不是通用的解决方案,因为
在JSON中是合法的字符,您的JSON数据可能看起来像:
{“msg”:“怎么了?”}
,它将再次使html解析器崩溃。此外,html/XML需要双引号来包装属性值。在html标记中使用单引号是不正确的(尽管浏览器出于向后兼容的原因接受了单引号)。我认为单引号不是有效的JSON字符串分隔符。
<input id="jsondata" value="<?php echo htmlspecialchars( json_encode($data), ENT_COMPAT ); ?>" >
<input id="jsondata" value="<?php echo htmlspecialchars( json_encode($data), ENT_NOQUOTES ); ?>" >
<input type="checkbox" name="deviceInfo" value="<?php print_r(json_encode(array_filter($array_data), JSON_FORCE_OBJECT));?>" />
?>