2009-04-07 2 views
4

과 함께 복제 할 수 있습니까? jQuery 문서에서 내 관심을 끄는 점을 발견했습니다. 이것은 jQuery가 브라우저에서 일반적으로 금지하는 다른 도메인에 JSON을 요청할 수 있다는 것입니다.jQuery는 크로스 도메인 아약스 호출을 어떻게 수행합니까? mootools를 사용하거나 jQuery로 이동할지 여부를 영원한 내부 싸움에서 mootools

크로스 도메인에 대한 몇 가지 해결 방법을 보았지만 교차 도메인을 사용하지 못했습니다. 처음에는 서버와 관련 있다고 생각했지만 처음에는 조금 더 실험했습니다. jQuery 워드 프로세서에서 JSON 요청이 작동하지 않습니다!

이 jQuery를 작동합니다

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", 
     function(data){ 
      $.each(data.items, function(i,item){ 
      $("<img/>").attr("src", item.media.m).appendTo("#images"); 
      if (i == 3) return false; 
      }); 
     }); 

이되지 Mootools의 수행합니다

var jsonRequest = new Request.JSON({url: "http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", onComplete: function(person, responseText){ 
    alert(responseText); 
}}).get({}); 

가 어떻게이 문제를 복제 할 수 있습니까? 그게 원인이야?

의 jQuery 문서 : http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback Mootols 문서는 : http://mootools.net/docs/Request/Request.JSON

답변

11

페이지에서 JSONP이라고 말합니다.

JSONP는 일반적인 응답을 반환하는 대신 서버가 사용자가 제공 한 메소드 (예 : HTTP)의 메소드 호출로 랩핑하는 속임수입니다. 대신 :

{"foo": "bar", "baz":"bah"}

그것은 반환 :

temporaryCallbackFunctionName({"foo": "bar", "baz":"bah"});

jQuery를 임시 콜백 함수를 정의하고 동일한 원본 정책에 의해 제한되지 않는 <script src="..."></script> 요소를 삽입합니다.

스크립트가로드되면 함수가 실행되고 그 것입니다.

서버가 악의적 인 (또는 해킹 된) 경우 브라우저에서 임의의 코드를 실행할 수 있다는 단점이 있습니다.

자세한 정보 here.

+0

방금 ​​읽었습니다. 훌륭했습니다! 유일한 문제는 prepending 일 것입니다 : P – perrohunter

3

플러그인을 사용하여 MooTools에서 JSONP를 사용할 수 있습니다 (JSONP). 핵심적인 MooTools 개발자 중 하나 인 Aaron Newton에 의해 제작되었습니다.

+0

크게 보입니다 – perrohunter

1

이 내용은 v1.2.2 이후 MooTools에 추가되었습니다 (2009 년 4 월 23 일에 출시 됨).

자세한 내용은 this documentation page을 확인하십시오.

관련 문제