2011-06-07 13 views
5

Sto cercando di ottenere il poster del film da IMDB in base al titolo di un film, in una funzione.Chiamare "imdbapi.com" con jquery

ho provato:

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

Ma io non so davvero come dati di "ritorno" che ho ricevuto da .ajax() ...

modificare IMDBapi restituisce un set di dati JSON, come in:

{"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: Questo ha funzionato:

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

C'è un problema di dominio incrociato lì ... – Neal

+1

quindi, il poster è il seguente pezzo di dati, giusto? '" Poster ":" http://ia.media-imdb.com/images/M/[email protected]@._V1._SX320.jpg "' –

+0

Sta usando JSONP. – SLaks

risposta

3

Puoi 't.

AJAX è asincrono; ricevi una risposta dal server solo dopo il ritorno della funzione.

Invece, è possibile rendere la funzione accetta una richiamata, proprio come fa $.ajax.

+0

Oooooh * questo è * perché non c'è ritorno ma una richiamata! :) – Manu

+1

Sì. Se qualcosa sembra insolitamente difficile da fare, di solito c'è una ragione. – SLaks

2

Si potrebbe fare:

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

} 

Demo: http://jsfiddle.net/xVAbm/2/

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

Per evitare restrizioni del dominio trasversali (poiché l'API sembra sostenerlo) utilizzare

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

Prova questo:

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'); 

    }); 
} 

è possibile ricevere e dati di elenchi come così.

Problemi correlati