2011-05-09 3 views
10

숨겨진 입력 필드에 Json 문자열을 저장하는 방법. 글쎄, 프로그래밍 방식으로 할 수는 있지만 탈출과 관련해서는 잘못된 것입니다. 내 캐릭터는 적당히 긴이기 때문에, 모든 이름은 "문자를 탈출하기 어렵다.이 프로그램 작동 방법을 설명하십시오 (1 단계), 콘솔 출력은 동일.입력 필드 값에 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

당신이 숨겨진 필드에이 그래서 나중에 사용할 수 있습니다 저장하고자, 아니면 당신이 양식을 통해 제출하는 생각을했다? –

+0

숨겨진 필드에 Json 문자열을 저장하고 있으며 값은 서버 측 템플릿을 통해 렌더링됩니다.클라이언트 측에서는 객체 배열로 파싱하고 추가 표현을 위해 – bsr

+0

Ok .. 다음 작업 ... \t \t Hogan

+0

@Hogan, 코드를 실행하면 두 메서드가 다른 데이터로 실행되고 있음을 알 수 있습니다. stringify()와 parseJSON() 모두 작동합니다. – Gazler

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

그냥 색소 침착은 그런 문제를 찾는 좋은 도우미입니다. –

+0

은 결정적이지 않습니다. parseJSON에 대한 jQuery API의 예제를 참조하십시오. var obj = jQuery.parseJSON ('{ "name": "John"}'); alert (obj.name === "John"); .. this works – bsr

+5

, http://www.json.org/, 내가 만난 가장 일반적인 오류는 객체 키와 관련이있다. JSON에서는 (JavaScript와는 달리) 반드시 큰 따옴표로 묶은 문자열이어야합니다. 실제로 JSON의 모든 문자열은 큰 따옴표로 묶어야합니다 (JavaScript는 작은 따옴표도 허용하지만 JSON은 허용하지 않습니다). ref : http://simonwillison.net/2006/Oct/11/json/ – bsr

1

참조 대답.

이유는 간단하다 -이 코드가있을 때 : 그냥 쓰레기로 떨어져 던지는 :

[sometag someattr="qwerty"/]

그리고 마지막 부분 (123 "cxzcxz")

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

브라우저로 이해 . 그래서 구체적인 사건에 대한 parseJSON는이 작업을 시도 : 당신의 가치를두기 전에 당신의 JSON을 인코딩한다 그래서 더 나은

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

:

[{

하지만 당신은 생각처럼 it`sa 전체 문자열 서버 측에 숨겨진 필드. 당신은 당신이 라인에 오류를 발견 할 것이다 (비 하나를 작업) 첫 번째 HTML의 againt HTML 유효성 검사기를 실행하면

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

});