PHP

PHP에서 JSONP 출력하기

정채윤 2013. 5. 12. 01:40

1. 개요

 

JSONP란 외부서버에 있는 정보를 자바스크립트로 통신하기 위한 기술이다. 일반적으로 웹상에서 다른 도메인간 통신을 할 때 크로스 도메인 보안 정책 제약 때문에 다른 도메인간 통신이 불가능 하지만 JSONP를 이용하면 통신이 가능하다.

 

 

2. 구현방법

 

//----- jsondata.php

 

<?

// 언어 인코딩 설정
 header("Content-type:text/javascript; charset=EUC-KR");    

 

/**

 * urlencode    한글 깨짐방지 인코딩

 **/

 $urluploader = "이미지 경로";
 $data = array(
     array( "no"=>"Brett", "name"=>urlencode("김길동"), "image"=>$urluploader."img1.jpg"), 

     array( "no"=>"Jason", "name"=>urlencode("Hunter"), "image"=>$urluploader."img2.jpg"),
     array( "no"=>"Elliotte", "name"=>urlencode("Harold"), "image"=>$urluploader."img3.jpg"),
     array( "no"=>"Tad", "name"=>urlencode("Williams"), "image"=>$urluploader."img4.jpg"),
     array( "no"=>"Author", "name"=>urlencode("Williams"), "image"=>$urluploader."img5.jpg"),
     array( "no"=>"Aron", "name"=>urlencode("Williams"), "image"=>$urluploader."img6.jpg"),
     array( "no"=>"Mont", "name"=>urlencode("Williams"), "image"=>$urluploader."img7.jpg"),
     array( "no"=>"Gagoil", "name"=>urlencode("Williams"), "image"=>$urluploader."img8.jpg"),
     array( "no"=>"Frank", "name"=>urlencode("lastName"), "image"=>$urluploader."img9.jpg")
);

 

/**

 * urldecode    인코딩된 정보를 디코딩

 **/
 $stringJSON = json_encode($data);

//헤더에 콜백을 붙여 줘서 크로스 도메인 문제 해결
 echo $_REQUEST["callback"];
 echo "(";
 echo urldecode($stringJSON);
 echo ")";
?>

 

//----- output

({"users":[
     {"no":"Brett","name":"김길동","image":"도메인주소/senchaTouch2/img/img1.jpg"},
     {"no":"Jason","name":"Hunter","image":"도메인주소/senchaTouch2/img/img2.jpg"},
     {"no":"Elliotte","name":"Harold","image":"도메인주소/senchaTouch2/img/img3.jpg"},
     {"no":"Tad","name":"Williams","image":"도메인주소/senchaTouch2/img/img4.jpg"},
     {"no":"Author","name":"Williams","image":"도메인주소/senchaTouch2/img/img5.jpg"},
     {"no":"Aron","name":"Williams","image":"도메인주소/senchaTouch2/img/img6.jpg"},
     {"no":"Mont","name":"Williams","image":"도메인주소/senchaTouch2/img/img7.jpg"},
     {"no":"Gagoil","name":"Williams","image":"도메인주소/senchaTouch2/img/img8.jpg"},
     {"no":"Frank","name":"lastName","image":"도메인주소/senchaTouch2/img/img9.jpg"}
]})