2011-06-07 15 views
5

Estoy tratando de obtener el póster de la película de IMDB de acuerdo con el título de una película, en una función.Llamar a "imdbapi.com" con jquery

que he intentado:

function getPoster(title) 
{ 
    $.ajax({ 
     url: "http://www.imdbapi.com/?t=" + title, 
     datatype: "json", 
     success: return data 
    }); 
} 

Pero no se sabe muy bien cómo los datos de "retorno" que recibí de .ajax() ...

edición IMDBapi devuelve un conjunto de datos JSON, como en:

{"Title":"Jurassic Park","Year":"1993","Rated":"PG-13","Released":"11 Jun 1993","Genre":"Action, Adventure, Family, Sci-Fi","Director":"Steven Spielberg","Writer":"Michael Crichton, Michael Crichton","Actors":"Sam Neill, Laura Dern, Jeff Goldblum, Richard Attenborough","Plot":"During a preview tour, a theme park suffers a major power breakdown that allows its cloned dinosaur exhibits to run amok.","Poster":"http://ia.media-imdb.com/images/M/[email protected]@._V1._SX320.jpg","Runtime":"2 hrs 7 mins","Rating":"7.9","Votes":"159458","ID":"tt0107290","Response":"True"} 

Edit2: Esto funcionó:

for(var i in titles) 
{ 
    $.ajax({ 
     url: "http://www.imdbapi.com/?t=" + titles[i], 
     dataType: 'jsonp', 
     success: function(data) { 
     $('body').append(data.Poster+'<br />'); 
     } 
    }); 
} 
+0

Hay un problema de dominio cruzado allí ... – Neal

+1

entonces, el póster es la siguiente información, ¿verdad? '" Poster ":" http://ia.media-imdb.com/images/M/[email protected]@._V1._SX320.jpg "' –

+0

Está usando JSONP. – SLaks

Respuesta

3

Puede 't.

AJAX es asincrónico; solo recibirá una respuesta del servidor después de que regrese su función.

En su lugar, puede hacer que su función acepte una devolución de llamada, al igual que $.ajax.

+0

Oooooh * es por eso que no hay retorno, ¡sino una devolución de llamada! :) – Manu

+1

Sí. Si algo parece inusualmente difícil de hacer, generalmente hay una razón. – SLaks

2

Se podría hacer:

function getPoster(title) 
{ 
    $.ajax({ 
     url: "http://www.imdbapi.com/?t=" + title, 
     datatype: "jsonp", 
     success: function(data){ 
      console.log(data); 
      do_some_function(data); 
     } 
    }); 

} 

Demostración: http://jsfiddle.net/xVAbm/2/

1
success: function(data){ 
    // do what you want with the data here.. 
    alert(data.Title); 
} 

Para evitar las restricciones de dominio cruzadas (desde la API parece apoyarlo) utilizan

function getPoster(title) 
{ 
    $.getJSON('http://www.imdbapi.com/?t=' + title + '&callback=?' , 
     function(data){alert(data.Title);} 
    ); 
} 
0

Prueba esto:

function getPoster(title){ 

$.getJSON('http://www.imdbapi.com/?t=' + title, function(data) { 
    var items = []; 

    $.each(data, function(key, val) { 

    items.push('<li id="' + key + '">' + val + '</li>'); 

    }); 

    $('<ul/>', { 

     'class': 'my-new-list', 
     html: items.join('') 
     }).appendTo('body'); 

    }); 
} 

Usted podría recibir y datos de la lista como tal.

Cuestiones relacionadas