Как сделать jsonp вызов API, используя jquery - PullRequest
4 голосов
/ 19 ноября 2010

Я новичок в программировании в целом, и у меня возникают проблемы с переносом данных в мое веб-приложение, когда я звоню в API moviedb.org. Я использую jquery, и я прочитал все документы, даже кулинарную книгу, и я все еще изо всех сил пытаюсь сделать эту работу, я также проверил свою консоль инструментов Google Dev, и она показывает, что вызов был успешным:

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>

Я думаю, что запутался с функцией обратного вызова, любые мысли будут оценены. Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 19 ноября 2010

Короче говоря, сервер, на который вы попали, похоже, не поддерживает JSONP, это функциональность на стороне сервера, которая должна присутствовать ... а это не так.Я также не вижу упоминаний в их документах API или форумах.URL должен быть ?callback=?, так как это единственный параметр строки запроса, например:

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

... но это все равно не будет работать, поскольку сервер его не поддерживает.Напомним: во многих случаях что-то с ключом API не не будет поддерживать JSONP (так как у клиента будет ключ), если API использует ключ для ограничения доступа ... другие используютэто просто для отслеживания может не заботиться.

2 голосов
/ 19 ноября 2010

Прежде всего вы должны убедиться, что API вашего звонка поддерживает jsonp (если его нет, вы увидите json, но вы ничего не сможете с ним сделать).Если вы не добавляете имя обратного вызова, поэтому оставляете? Callback =?тогда 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);
1 голос
/ 19 ноября 2010

Эта функция «post» вызывает сервер

$.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");

Как видите, я поставил одну и ту же «каждую» итерационную функцию.Я не знаю, правильно ли вы это делаете, потому что я не выполняю этот код.Но я настоятельно рекомендую вам попробовать выполнить код в функции (data) ... с предупреждением (...), как показано ниже:

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

С этим вы действительно знаете, что сdata "vale.

Я надеюсь, что вы помогли.

...