내가 사용하는 접근법은 json을 객체 리터럴로 패딩 / 랩핑 한 다음 파일 확장자를 .jsonp로 저장하는 것입니다. 이 방법은 대신 새 jsonp 파일 (test.jsonp)로 작업 할 것이므로 원래 json 파일 (test.json)도 변경되지 않은 상태로 둡니다. 랩퍼의 이름은 무엇이든 가능하지만 jsonp를 처리하는 데 사용하는 콜백 함수와 동일한 이름이어야합니다. 예를 들어 test.json을 사용하여 'test.jsonp'파일의 jsonp 래퍼 추가를 보여줍니다.
json_callback({"a" : "b", "c" : "d"});
그런 다음 스크립트에서 전역 범위로 재사용 가능한 변수를 작성하여 리턴 된 JSON을 보유하십시오. 그러면 콜백 함수 대신 스크립트의 다른 모든 함수에서 반환 된 JSON 데이터를 사용할 수 있습니다.
var myJSON;
다음은 스크립트 삽입으로 json을 검색하는 간단한 함수입니다. IE는 jQuery .append 메소드를 지원하지 않으므로 여기서 jQuery를 사용하여 스크립트를 문서 헤드에 추가 할 수 없습니다. 아래 코드에서 주석 처리 된 jQuery 메소드는 .append 메소드를 지원하는 다른 브라우저에서 작동합니다. 차이점을 보여주기 위해 참조로 포함됩니다.
function getLocalJSON(json_url){
var json_script = document.createElement('script');
json_script.type = 'text/javascript';
json_script.src = json_url;
json_script.id = 'json_script';
document.getElementsByTagName('head')[0].appendChild(json_script);
// $('head')[0].append(json_script); DOES NOT WORK in IE (.append method not supported)
}
다음은 json 결과 데이터를 전역 변수로 가져 오는 짧고 간단한 콜백 함수 (jsonp 래퍼와 동일한 이름)입니다.
function json_callback(response){
myJSON = response; // Clone response JSON to myJSON object
$('#json_script').remove(); // Remove json_script from the document
}
도트 표기법을 사용하여 스크립트의 모든 기능으로 json 데이터에 액세스 할 수 있습니다. 예로서:
console.log(myJSON.a); // Outputs 'b' to console
console.log(myJSON.c); // Outputs 'd' to console
이 방법은 사용하는 방법과 약간 다를 수 있지만 많은 장점이 있습니다. 먼저 동일한 jsonp 파일을 동일한 기능을 사용하여 로컬 또는 서버에서로드 할 수 있습니다. 보너스로 jsonp는 이미 도메인 간 친화적 형식이며 REST 유형 API와 함께 쉽게 사용할 수 있습니다.
물론 오류 처리 기능은 없지만 왜 필요한가? 이 방법으로 json 데이터를 얻을 수 없다면 json 자체에 문제가 있다고 생각할 수 있습니다. 좋은 JSON 유효성 검사기에서 확인하십시오.
JSON
문자열 을 반환하면 이미 자바 스크립트 객체를 검색하는 중이므로 사용할 필요가 없습니다eval()
.