2015-01-24 1 views
1

사용하려는 API에 문제가 발생했습니다. API는 일반 JSON을 반환하지만 교차 도메인 AJAX를 호출하므로 jsonp를 사용해야합니다. 나는 데이터 유형을 변경할 때 크로스 도메인 AJAX JSONP와 함께 호출하면 일반 JSON을 반환합니다.

  $.ajax({ 
       type: "GET", 
       url: url + query, 
       contentType: "application/json", 
       dataType: "jsonp", 
       success: function(data){ 
        console.log(data); 
       } 
      }); 

문제

는에 "JSON은"오류가 발생합니다

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'X' is therefore not allowed access.

이것은 자사의 크로스 도메인 Ajax 호출하기 때문이다. 하지만 jsonp 일 때 다음과 같이 말합니다 :

Uncaught SyntaxError: Unexpected token :

즉, json 형식을 인식하지 못합니다.

jquery를 ajax 호출에 사용하고 있습니다. 어떤 제안이 어떻게 해결할 수 있습니까?

+0

:

은 JSONP에 관해서는, 여기에 어떻게 그리고 왜이 작품의 훌륭한 설명입니다. – Alek

답변

0

API가 호스팅되는 서버에 액세스 할 수 없으므로 CURL과 같은 웹 서비스 유틸리티를 사용하여 API에 액세스 할 수 있습니다. AJAX 호출을 사용하려면 API가 제공되는 서버에서 CORS (Cross Origin Resource Sharing)를 사용하도록 설정해야합니다.

CURL 호출이 이루어지고 적절한 응답이 반환되는 AJAX를 통해 로컬 서버 페이지에서 웹 서비스를 호출 할 수 있습니다.

0

도메인 간 제한 (CORS, JSONP, Iframe 전송 등)을 우회하는 방법에는 여러 가지가 있지만 모든 방법에 공통적으로 API 서버가 필요합니다. 따라서 API 서버에 대한 권한이없는 경우 도메인 간 제한을 발견 할 수 없습니다.

이 작업을 수행하는 유일한 방법은 제어 할 수있는 API (프록시가 동일한 도메인에 있거나 적절한 CORS 헤더를 삽입 할 수 있음) 앞에 프록시를 배치하는 것입니다. 그러나 이는 성능에 영향을 미치며 법적 영향을 미칠 수 있습니다. 나는이 헤더를 변경할 수 없습니다 그래서 서버에 권한이없는 것을 언급하는 것을 잊었다

What is JSONP all about?

관련 문제