2010-11-19 4 views
4

프로그래밍에 익숙하지 않아 moviedb.org API에 전화를 걸 때 웹 응용 프로그램에 데이터를 가져 오는 데 문제가 있습니다. 내가 jQuery를 사용하고 그리고 난 모든 문서, 심지어 요리 책을 읽고 그리고 난 여전히이 작품을 만들기 위해 고군분투하고, 나 또한 내 구글 개발 도구 콘솔을 확인하고이 호출이 성공했는지 보여줍니다 여기에jquery를 사용하여 API에 jsonp 호출을하는 방법

Status Code:200 OK 
[{"id":550,"name":"Fight Club","posters":[{"image":{"type":"poster","size":"original","height":1000,"width":675,"url":"http://hwcdn.themoviedb.org/posters/f8e/4b........ 

내 코드 :

<script> 
    $.getJSON("http://api.themoviedb.org/2.1/Movie.getImages/en/json/ed7e2e092ca896037ce13d2bf11a08f1/550&callback=?", 
    function(data){ 
     $.each(data, function(i,item){ 
     $("<img/>").attr("src", item.image).appendTo("#images"); 
     }); 
    }); 
</script> 

콜백 함수가 엉망이라고 생각합니다. 어떤 생각이라도 만족할 것입니다. 미리 감사드립니다.

+0

API의'api.themoviedb.org/2.1' 버전은'JSONP'를 지원하지 않습니다. [그들의 문서는 그것이 버전 3 API에서 지원된다고 말합니다] (http://help.themoviedb.org/kb/api/about-3) :'이전 버전의 API와는 달리,/3은 단일 형식 인 JSON 만 지원합니다 . XML 및 YAML 지원이 공식적으로 중단되었습니다. 이를 통해 단일 유형 1 개를 개선하는 데 중점을 둘 수 있었으며 캐시 된 데이터 재사용 능력도 향상되었습니다. JSONP도 공식적으로 지원됩니다. 콜백 매개 변수를 추가하면 완료됩니다. ' – hippietrail

답변

3

요약하면 서버가 JSONP를 지원하지 않는 것 같습니다. 서버 측 기능이 있어야합니다. 그렇지 않은 서버입니다. 또한 API 문서 나 포럼에는 언급이 없습니다. 서버가이를 지원하지 않기 때문에,

http://api.themoviedb.org/2.1/Movie.getImages/en/json/<apikey>/550&callback=? 

...하지만 여전히 작동하지 않습니다 : 그것은 다음과 같이 유일한 쿼리 문자열 매개 변수이기 때문에 URL은 ?callback=?해야한다. 그냥 제쳐두고 : API 키 을 사용하는 많은 경우 API를 사용하여 액세스를 제한하는 경우 JSONP (클라이언트가 키를 가질 수 있기 때문에)를 지원하기 위해이 아니며 추적을 위해 키를 사용하는 경우가 많습니다 상관 없어. 당신이 볼 수 있듯이

+0

Excellent Nick !! – RubyGladiator

+0

올바르지 않습니다. 'callback =?'은 실제로'? '를 생성 된 함수 이름으로 대체하기 위해 jQuery에 의해 변경됩니다. '? '를'foobar'라고 바꾸면, 유효한 데이터 인'http : // api'가 나타납니다.//www.getImages/en/json/ed7e2e092ca896037ce13d2bf11a08f1/550 & 콜백 = foobar' – hippietrail

+0

@hippietrail - 아니요 ... 답변이 여전히 올바른데, URL과 함께 반환되는 것은 ** 아닙니다 ** JSONP, 포장되지 않았습니다. 'foobar ();'함수 호출은 JSON 데이터 일뿐입니다. 그것을 잘못 말하기 전에 테스트 :) 나는 jQuery가 JSONP 매개 변수로 어떻게 작동하는지 알고있다 ... 그러나 당신이 호출하는 서버가 JSONP를 지원하지 않는다면 이는 전혀 관련이 없다. 대답. –

1

이 기능은 "게시물"나는 같은 "각"반복 기능을 넣어, 서버를

$.post("http://api.themoviedb.org/2.1/Movie.getImages/en/json/ed7e2e092ca896037ce13d2bf11a08f1/550&callback=?", 
    function(data){ 
    //After the server code run, this code is executed with the 
    //information of the response into the parameter 'data' 
    $.each(data, function(i,item){ 
    $("").attr("src", item.image).appendTo("#images"); 
    }); 
    }, 
json"); 

를 호출합니다. 이 코드를 실행하지 않기 때문에 올바르게 수행하는지는 알 수 없습니다. 당신이 정말로 "데이터를"S 무엇을 알 수 있습니까이와

$.post("http://api.themoviedb.org/2.1/Movie.getImages/en/json/ed7e2e092ca896037ce13d2bf11a08f1/550&callback=?", 
    function(data){ 
    alert(data); 
    }, 
"json"); 

:하지만 강하게 당신은 내가 아래 표와 같이 경고 (...)와 함께 ... 기능 (데이터)에 코드를 실행하려고하는 것이 좋습니다 골짜기.

도움이 되었기를 바랍니다.

2

우선 jsonp를 호출하는 api가 지원되는지 확인해야합니다 (jsonp가 표시되지 않으면 아무 것도 할 수 없음).

초. 콜백 이름을 추가하지 않으므로? 콜백 =? jquery는 URL 끝 부분에 임의의 숫자를 추가하여 문제가 발생할 가능성이 높습니다. 그러면 다음과 같이 보입니다.

http://someurl.com?callback=140989239 

이는 단지 아플뿐입니다. 표준 jsonp에서는 실제로 json을 <script> 태그에 삽입합니다. 이렇게하려면 다음과 같이하고 싶을 것입니다 :

var headID = document.getElementsByTagName('head')[0]; 
var newScript = document.createElement('script'); 
newScript.type = "text/javascript"; 
newScript.src = "enter your api url that you are calling here with a specified callback" 
headID.appendChild(newScript); 
+0

"우선 jsonp를 지원하는 api가 있는지 확인해야합니다 (jsonp가 표시되지 않는 경우 jsonp를 사용하면 아무 것도 할 수 없습니다). 예, 콘솔에 표시되지만 액세스 할 수 없습니다. 또한 콜백 함수 이름에 대해 생성 된 radom 번호를 볼 수 있습니다. 감사합니다 매트! – RubyGladiator

+0

그래서 반환하는 json에 액세스하려면 콜백을 지정하십시오. 그래서 다음과 같은 일을하십시오. function makeRequest ($ .getJSON ("url? callback = someCallback", {...});) 그리고 콜백 이름의 이름을 호출하는 "someCallback"함수가 있습니다. function someCallback {여기서 json으로 원하는 것을하십시오} 이것이 작동하지 않는다면 API는 아직 jsonp를 지원하지 않습니다. 희망이 도움이 !! – Matt

관련 문제