2010-11-29 7 views
1

JSON 데이터를 서버 쪽의 HTML 숨김 필드에 저장합니다. 그런 다음 클라이언트 측에서 Javascript와 JQuery를 사용하여 해당 데이터를 검색하고 싶습니다. 문제는 JSON 객체 대신 JSON 문자열을 얻는다는 것입니다.숨겨진 입력에서 JSON 데이터 검색

copy.channelList = new ChannelTest(); 
copy.channelList.fromJSONObjectAll($("#data input[id=channels]").val()) 

그래서 내가, $ (대신에서 JSON 개체의 JSON 문자열을 얻을 : 이것은 클라이언트 측에서 내 코드

<form id="data" style="display: none;"> 
    <input id="channels" type="hidden" tal:attributes="value python: view.context['ChannelManager'].toJSON(view.channels.values())" /> 
    <input id="mediaGroups" type="hidden" tal:attributes="value python: view.context['MediaGroupManager'].toJSON(view.mediaGroups.values())" /> 
</form> 

입니다 :

이 서버 측에 내 코드입니다 "# 데이터 입력 [id = 채널]"). val().

JSON 개체에서 JSON 문자열을 변환하지 않고 JSON 개체를 어떻게 얻을 수 있습니까?

미리 감사드립니다. 네이티브 JSON 지원하지 않는 이전 브라우저의

+1

"문자열 변환없이 JSON 객체 가져 오기"는 무엇을 의미합니까? – casablanca

+0

내가 원하는 부분을 게시했지만 그 부분이 혼란 스럽습니다. json 문자열을 객체로 변환하지 않고 json 문자열을 객체로 변환하는 방법을 묻습니다. –

+0

HTML 입력을 채울 때 데이터는 JSON 객체가 아니라 JSON 문자열입니다. 그러나 클라이언트 측에서 해당 데이터를 가져 오면 JSON Object 대신 JSON 문자열이됩니다. 그 JSON 문자열을 JSON 개체로 변환하는 것을 피하고 싶습니다. – bribon

답변

6
JSON.parse(jsonString); 

, 당신은 단순히 json2.js 포함 할 수 있고이 가능한 기능이 될 것입니다.


또는 서버 측 스크립팅을 사용하여이 단계를 건너 뛸 수 있습니다. 스크립트 태그에 JSON을 간단하게 작성할 수 있습니다. 원시 자바 스크립트처럼 스크립트 태그에 의해 암시 적으로 파싱됩니다.

<script type="text/javascript"> 
    var myObj = <%= myJsonString %>; 
    console.log('we got this value: '+ myObj.myValue); 
</script> 
+0

JSON.parse (jsonString)을 피하고 싶습니다. 클라이언트 측에 저장할 때 데이터가 JSON 객체이기 때문입니다. 뭐가 문제 야? JSON 객체를 HTML 입력으로 저장할 수 있습니까? 나는 – bribon

+0

''태그를 _only_ 문자열 값을 가질 수있는 프레임 워크와 같은 종류의 스크립팅을 사용할 수 없습니다. 따라서 데이터를 문자열로 저장하려면 문자열에서 자바 스크립트 객체로 변환해야합니다. 또는 HTML 요소를 삽입하는 것을 건너 뛸 수 있으며 위에서 설명한대로 스크립트 태그에 직접 쓸 수 있습니다. 하지만 객체를 직접 저장하는 데 ''을 사용하면 안됩니다. 문자열 만. 양식 요소는 양식 제출을 위해 자체적으로 인코딩됨을 기억하십시오. 그래서''는'? foo = bar'와 같이 인코딩됩니다. Javascript 객체 인 경우 자체를 복잡한 객체로 어떻게 인코딩합니까? –

+0

@bribon : 서버의 데이터가 json 문자열이므로 자바 스크립트 객체로 클라이언트에 직접 전송할 방법이 없습니다. Squeegy의 제안 (js 변수로 데이터 포함하기)을 따르면 페이지를 처음 읽을 때 브라우저가 구문 분석을 수행합니다. –