Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.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字符串_Javascript_Jquery - Fatal编程技术网

Javascript 在输入字段值中存储JSON字符串

Javascript 在输入字段值中存储JSON字符串,javascript,jquery,Javascript,Jquery,如何在隐藏的输入字段中存储Json字符串。好吧,我可以通过编程来实现,但是转义有点问题。由于我的字符串长度适中,很难对所有名称转义“char”。请解释它是如何以编程方式工作的(第1阶段),因为控制台输出看起来是一样的 [{X:0,Y:0,W:0,H:500},{X:358,Y:62,W:200,H:500}]test2.html:21 [{“X:0,Y:0,W:0,H:500},{“X:358,Y:62,W:200,H:500}] test2.html:22 通过阶段1 jquery.min.j

如何在隐藏的输入字段中存储Json字符串。好吧,我可以通过编程来实现,但是转义有点问题。由于我的字符串长度适中,很难对所有名称转义“char”。请解释它是如何以编程方式工作的(第1阶段),因为控制台输出看起来是一样的

[{X:0,Y:0,W:0,H:500},{X:358,Y:62,W:200,H:500}]test2.html:21
[{“X:0,Y:0,W:0,H:500},{“X:358,Y:62,W:200,H:500}]
test2.html:22
通过阶段1
jquery.min.js:16未捕获的语法错误:输入意外结束

谢谢

bsr



试验
$(文档).ready(函数(){
myItems=[{“X”:0,“Y”:0,“W”:0,“H”:500},
{“X”:358,“Y”:62,“W”:200,“H”:500}]
log(JSON.stringify(myItems));
$(“#jsondata”).val(JSON.stringify(myItems));
log(document.getElementById(“jsondata”).value);
控制台日志(“通过阶段1”);
var obj=jQuery.parseJSON($(“#jsondata2”).val();
控制台日志(对象长度);
控制台日志(“通过阶段2”);
}); 

编辑:

下面的代码有效。不确定它是否正确。因此将标记一个好的解释作为答案。谢谢

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE HTML><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Test</title> 
<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
</head>
<body>
        <input type="hidden" id="jsondata" />
        <input type="hidden" id="jsondata2" value='[{"X":0,"Y":0,"W":0,"H":500},{"X":358,"Y":62,"W":200,"H":500}]'/>


    <script >
            $(document).ready(function() {  

            myItems = [{"X":0,"Y":0,"W":0,"H":500},
                   {"X":358,"Y":62,"W":200,"H":500}]

            console.log(JSON.stringify(myItems));
            $("#jsondata").val(JSON.stringify(myItems));
            console.log(document.getElementById("jsondata").value);
            console.log("PASSED PHASE 1");

            var obj = jQuery.parseJSON($("#jsondata2").val());
            console.log($("#jsondata2").val()); 
            console.log(obj[0].H);  
            console.log("PASSED PHASE 2");           
        }); 
    </script>
</body>
</html>

试验
$(文档).ready(函数(){
myItems=[{“X”:0,“Y”:0,“W”:0,“H”:500},
{“X”:358,“Y”:62,“W”:200,“H”:500}]
log(JSON.stringify(myItems));
$(“#jsondata”).val(JSON.stringify(myItems));
log(document.getElementById(“jsondata”).value);
控制台日志(“通过阶段1”);
var obj=jQuery.parseJSON($(“#jsondata2”).val();
log($(“#jsondata2”).val());
console.log(obj[0].H);
控制台日志(“通过阶段2”);
}); 

试试下面的代码,我觉得你有一个数组而不是对象

 myItems = { data : [{"X":0,"Y":0,"W":0,"H":500},
                     {"X":358,"Y":62,"W":200,"H":500}] };

请参阅关于引号的答案

原因很简单——当您有以下代码时:

[sometag someattr="qwerty"123":cxzcxz"/] [sometag somettr=“qwerty”123”:cxzcxz/] 浏览器将其理解为:

[sometag someattr="qwerty"/] [sometag somettr=“qwerty”/ 最后一部分(123“:cxzcxz”)只是作为垃圾扔掉。因此,对于您的具体案例,parseJSON尝试处理以下内容:

[{ [{ 但你认为这是一个完整的字符串,比如:

[{"X":0,"Y":0,"W":0,"H":500},{"X":358,"Y":62,"W":200,"H":500}] [{“X:0,Y:0,W:0,H:500},{“X:358,Y:62,W:200,H:500}]
因此,最好在服务器端输入隐藏字段的值之前对json进行编码。

html标记无效…如果对第一个html(非工作html)再次运行html验证程序,您会发现行中有错误…

您可以这样做,但这很糟糕,html:

<textarea id="jsondata" sytle="display:none"></textarea>

您是想将其存储在一个隐藏字段中以便以后使用,还是想通过表单提交它?我正在将Json字符串存储在一个隐藏字段中,并通过服务器端的模板呈现值。在客户端,我将其解析为对象数组并使用它进行进一步表示OK..以下操作有效…,如果有的话有一个很好的解释,我会把它标记为答案。谢谢你的帮助如果你在服务器端渲染它,为什么不把它渲染成脚本块,不用解析就立即使用它呢?安全考虑?我想你没有抓住问题的重点。他问为什么当数据通过javascript注入到字段时会这样工作,但当数据位于字段的value属性中时,它不工作。@Gazler:我不理解not。我看到
stringify()
work和
parseJSON()
notwork。
parseJSON()
失败,因为它不是有效的JSON。我给出了有效的JSON:solved。@Hogan,如果你运行代码,你会看到这两个方法正在使用不同的数据。stringify()和parseJSON()都可以工作。Hogan我如你所说更改了数据,输入到相应的,仍然是相同的错误。因此,这可能与转义字符有关”
value=“{”data”:[{“X”:0,“Y”:0,“W”:0,“H”:500},{“X”:358,“Y”:62,“W”:200,“H”:500}]}“
是错误的,正如@rachet指出的那样,在由
分隔的属性中不能有
。你必须将它与
混为一谈“
。正是这样的颜色化是发现类似问题的好帮手。这不是结论,请参见jQuery API中的parseJSON var obj=jQuery.parseJSON(“{”name:“John”}”);alert(obj.name==”John“)示例;…这也是,到目前为止,我遇到的最常见的错误与对象键有关。在JSON中(与JavaScript不同),这些字符串必须是双引号字符串。事实上,JSON中的所有字符串都必须用双引号括起来(JavaScript也允许单引号;JSON不允许单引号)。参考:如果{'X':0,'Y':0,'W'W':0,'H':500}来..???该值将不正确..好的捕获..第一个关于名称空间的错误,因为该文件最初是一个xhtml文件,然后我删除了几个部分..第二个错误,关于额外的间距,不确定..需要阅读更多..谢谢这是一个好的解决方案,但有一个小问题。如果值将包含
字符串JSON将中断,因为Textarea正在自动解码HTML实体,因此它将转换为
。例如
{x:“a”,y:“b”c}
将转换为
{x:“a”,y:“b”c}
[{ [{"X":0,"Y":0,"W":0,"H":500},{"X":358,"Y":62,"W":200,"H":500}]
<textarea id="jsondata" sytle="display:none"></textarea>
$(function(){

    var myItems = [{"X":0,"Y":0,"W":0,"H":500}, {"X":358,"Y":62,"W":200,"H":500}]

    $("#jsondata").val(JSON.stringify(myItems));

});