참조 : http://seotory.tistory.com/9
일반적인 jquery ajax 호출.
http://samedomain/test.json
{"message":"json test"} |
jquery 를 이용한 ajax 호출은 다음과 같이 할 수 있다.
$.ajax({ url : "/test.json", success: function(data) { alert(data.message); }, error: function(data) { console.log(data); } }); |
만약 다른 도메인의 url 로 ajax 호출을 할때에는 어떻게 해야 하나??
웹 브라우져에서는 same-origin policy (SOP) 정책에 따라 다른 도메인간의 request을 제한하고 있다.
<script/> 태그는 same-origin-policy (SOP) 정책에 속하지 않는다는 사실을 근거로, 서로 다른 도메인간의 javascript 호출을 위하여 jsonp (또는 json with padding) 이 사용되었다.
jsonp를 사용하기 위해서는 필수적으로 서버단에서 jsonp의 포맷을 따라야한다. 이것은 jsonp를 사용하기 위한 "규칙"이다.
그리고 항상 get 방식으로 호출해야 한다.
http://otherdomain/test.jsonp
myCallback( {"message":"json test"} ) |
jquery 를 이용한 ajax 호출은 다음과 같이 할 수 있다.
$.ajax({ url : "http://otherdomain/test.jsonp", dataType: 'jsonp', jsonp: 'callback', jsonpCallback: "myCallback", success: function(data) { alert(data.message); }, error: function(data) { console.log(data); } }); function myCallback(data) { alert("myCallback : " + data.message); console.log('myCallback 성공 - ', data); } |
ajax 를 호출하면 실제로 다음과 같이 request 가 된다.
http://otherdomain/test.jsonp?callback=myCallback&_=1446182239995
client - server 간에 미리 협의가 있어야 한다.
- parameter name(callback), parameter value(myCallback)
server 에서 response 할 때 data 를 myCallback 함수로 감싸서 보내면 된다.
client 에서는 myCallback 함수가 호출이 된다.
아래 처럼 사용할 수 도 있다.
<script type="text/javascript" src="http://otherdomain/test.jsonp?callback=myCallback"></script>
혹시 에러날 것을 방지 하기 위해 아래 처럼 try - catch 로 감싸서 내려주면 더 안전하다.
try { myCallback( {"message":"json test"} ) } catch(e) {} |
'프로그래밍 > Javascript' 카테고리의 다른 글
javascript containsAll (1) | 2016.11.04 |
---|---|
[jquery] hide, show 함수, visibility 속성 (0) | 2016.10.28 |
한글, 영문 check (0) | 2011.12.27 |
ajax 예제 (3) | 2011.12.02 |
숫자 입력 체크. (0) | 2011.11.29 |