2011-05-09 116 views
10

如何將Json字符串存儲在隱藏的輸入字段中。那麼,我可以通過編程來完成,但是轉義出錯了。由於我的字符串長度適中,是很難逃脫「字符的所有名稱。請解釋它是如何工作程序(一期),作爲控制檯輸出看起來相同。在輸入字段值中存儲JSON字符串

[{"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


<?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(obj.length);  
      console.log("PASSED PHASE 2");   
     }); 
    </script> 
</body> 
</html> 

編輯:

以下代碼有效。不確定它是否正確。所以會標記出一個好的解釋作爲答案。謝謝。

<?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> 
+1

你想保存這在一個隱藏字段,以便您可以在以後使用它,或者是你想通過表單提交了嗎? – 2011-05-09 17:50:51

+0

我將Json字符串存儲在隱藏字段中,並且該值是通過服務器端的模板呈現的。在客戶端,我將它解析爲對象數組並將其用於進一步表示 – bsr 2011-05-09 18:04:54

+0

好吧..以下工作... \t \t Hogan 2011-05-09 17:54:25

+0

@Hogan,如果你運行代碼,你會發現兩種方法都是從不同的數據中運行的。 stringify()和parseJSON()都可以工作。 – Gazler 2011-05-09 17:58:40

6
<input type="hidden" id="jsondata2" value="[{"X":0,"Y":0,"W":0,"H":500},{"X":358,"Y":62,"W":200,"H":500}]"/> 

是不正確的。使用單引號代替'的值字符串中的雙引號"修復(或逃避"

<input type="hidden" id="jsondata2" value="[{'X':0,'Y':0,'W':0,'H':500},{'X':358,'Y':62,'W':200,'H':500}]"/> 
+1

只是SO着色是尋找類似問題的好幫手。 – 2011-05-09 17:56:46

+0

這是不確定的,請參閱parseJSON的jQuery API示例var obj = jQuery.parseJSON('{「name」:「John」}'); alert(obj.name ===「John」); ..這工作 – bsr 2011-05-09 18:02:21

+5

也http://www.json.org/,到目前爲止我遇到的最常見的錯誤涉及對象鍵。在JSON中(與JavaScript不同),這些必須是雙引號字符串。實際上,JSON中的所有字符串都必須用雙引號引起來(JavaScript也允許使用單引號; JSON不會)。 ref:http://simonwillison.net/2006/Oct/11/json/ – bsr 2011-05-09 18:31:54

1

看到有關報價的答案。

原因很簡單 - 當你有這樣的代碼:

[sometag someattr="qwerty"123":cxzcxz"/]

瀏覽器將其理解爲:

[sometag someattr="qwerty"/]

而最後一部分(123 「:cxzcxz」)剛剛擺脫爲垃圾。因此,對於您的具體情況parseJSON試圖與眼前這個工作:

[{

但是你認爲it`sa滿弦喜歡:

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

所以不如你應該投入的前值編碼您的JSON服務器端的隱藏字段。

3

你可以做這樣的事情,但它是相當壞,HTML:

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

和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)); 

}); 
相關問題