답변:
액세스하려는 API가 JSONP를 지원 하는 경우 요청에 자바 스크립트 함수 이름 만 제공하면 JSONP는 myfunc({the:data});
일반 자바 스크립트처럼 실행할 수있는 자바 스크립트를 반환 하므로 새 <script src="www.website.com/somecall?jsonp=myfunc">
태그를 생성 해야합니다. "요청 보내기"( 요청 type: jsonp
에서 사용하는 경우 jQuery에서 자동으로 수행 $.ajax
)
단점은 JSONP를 지원하기 위해 API 제공자가 필요하다는 것입니다.
대상 웹 사이트에 crossdomain.xml
루트라는 파일 이있는 한 Flash는 도메인 간 내용에 액세스 할 수 있습니다 ( 일반적으로 API를 제공하는 서버의 경우).
단점은 사용자 브라우저에 Flash가 필요하고 데이터를 얻는 웹 사이트에 도메인 간 요청을 허용하는 crossdomain.xml이 있어야한다는 것입니다.
PHP와 같은 서버 측 언어에는 BS 동일 도메인 제한이 없으므로 프록시 역할을하는 스크립트를 가질 수 있습니다 (예 : cURL과 같은 http 확장자 중 하나를 통해 다운로드).
또한 웹 페이지 / 자바 스크립트로 전달하기 전에 서버에서 데이터를 정리하거나 여러 소스를 매시업 할 수있어 유용한 데이터 부분 만 추출 할 수 있다는 이점이 있습니다. 대역폭이 문제가 될 수있는 곳.
단점은 모든 요청이 서버를 통과해야하므로 서버의로드가 증가한다는 것입니다.
그러나 목표는 교차 도메인 또는 jsonp를 지원하기 위해 대상이 필요하지 않기 때문에 모든 자원에서 작동한다는 것입니다. 따라서 아무것도 작동하지 않으면 이것이 가능합니다.
Internet Explorer에 도메인 간 요청이 있음
Firefox 3.5 이상에는 출처 간 공유 표준 이 있지만 PHP와 같은 특수 헤더를 포함하려면 액세스하려는 리소스가 필요합니다.
header("content-type: Access-Control-Allow-Origin: *");
header("content-type: Access-Control-Allow-Methods: GET");
다른 주요 브라우저도이 기능을 지원 하므로 이전 브라우저를 지원할 필요가없고 해당 헤더를 전송하기 위해 액세스하려는 리소스를 얻을 수있는 경우 이것이 가장 좋은 방법 일 수 있습니다. 그렇지 않으면 서버 측 대본은 나의 추천 일 것이다.
Firefox에는 사용자 설정 capability.policy.default.XMLHttpRequest.open
도 있지만 브라우저에서 설정을 변경하는 사용자는 의지하지 않습니다.
이를 위해 다른 도메인의 API를 사용할 수 있습니다. Javascript는 웹 서버 (도메인)에있는 PHP 파일 (또는 다른 스크립트 파일)을 호출하고 CURL을 사용하여 다른 도메인의 API를 호출하여 응답을받습니다.