서버에서 전송한 데이터로 자바스크립트에서 JSON.parse를 실행하니 에러가 났다.
확인해본 결과,
다음과 같이 서버에서 JSON 형식의 데이터를 받아오는 경우:
List<JSONObject> resultList = standardService.selectList();
mv.addObject("resultList", resultList);
return mv;
그리고 자바스크립트에서 JSON.parse를 수행하는 경우:
var zNodes = JSON.parse('${resultList}');
이 경우 실제로는 다음과 같이 따옴표로 감싸진 문자열이 된다.
var zNodes = JSON.parse('[{"id":"data1","pId":"ROOT","name":"data1"}, {"id":"data2","pId":"ROOT","name":"data2"}]');
이로 인해 JSON.parse에 유효한 JSON 문자열이 아닌 문자열이 전달되어 에러가 발생한 것이다.
올바른 방법은 다음과 같이 JavaScript 코드에서 서버에서 전달한 JSON 데이터를 직접 사용하는 것이다.
var zNodes = ${resultList};
이렇게 하면 서버에서 전송된 JSON 데이터가 그대로 JavaScript 코드에 삽입되어 유효한 JSON 형식이 된다.
참고로 홑따옴표를 쓰는 것과 안쓰는 것의 차이는 문자열 처리에 있다.
홑따옴표를 사용하는 경우:
var data = '${myData}';
- 문자열 데이터를 JavaScript 변수에 할당할 때 사용
- 서버에서 받아온 데이터가 문자열일 경우에 주로 홑따옴표를 사용
- 만약 yourData가 문자열이 아닌 숫자 등의 데이터일 경우에도 사용
홑따옴표를 사용하지 않는 경우:
var data = ${myData};
- 서버에서 받아온 데이터를 그대로 JavaScript 변수에 할당
- 주로 숫자, 불리언, 객체 등의 데이터 타입을 그대로 할당할 때 사용