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

如何将Json字符串存储在隐藏的输入字段中。 好吧,我可以通过编程方式完成它,但是转发出错了。 由于我的字符串适度长,很难逃脱“所有名称的字符。请解释它是如何以编程方式工作(第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 PASSED PHASE 1
jquery.min.js:16Uncaught SyntaxError: Unexpected end of input

谢谢,

BSR。


    Test        $(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(obj.length); console.log("PASSED PHASE 2"); });    

编辑:

以下代码有效..不确定它是否正确。 所以将一个很好的解释标记为答案。 谢谢。

    Test        $(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"); });    

html标记无效…如果你再次运行htmlvalidation器第一个html(非工作的),你会发现错误的行…

  

是不正确的。 在值字符串中使用单引号'而不是双引号"来修复它(或转义"

  

你可以做这样的事情,但是非常糟糕,HTML:

  

和JS

 $(function(){ var myItems = [{"X":0,"Y":0,"W":0,"H":500}, {"X":358,"Y":62,"W":200,"H":500}] $("#jsondata").val(JSON.stringify(myItems)); }); 

请参阅有关报价的答案。

原因很简单 – 当你有这个代码时:

  [sometag someattr =“qwerty”123“:cxzcxz”/] 

浏览器将其理解为:

  [sometag someattr =“qwerty”/] 

最后一部分(123“:cxzcxz”)只是作为一个垃圾扔掉了。 所以对于你的具体案例,parseJSON尝试使用这个:

  [{ 

但你认为它是一个完整的字符串:

  [{ “X”:0, “Y”:0, “W”:0, “H”:500},{ “X”:358, “Y”:62, “W”:200, “H”: 500}] 

因此,在服务器端输入隐藏字段值之前,应该对json进行编码。

尝试下面的代码,看起来你有一个数组不是我的对象。

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