2011-06-07 17 views
5

Próbuję uzyskać plakat filmowy z IMDB zgodnie z tytułem filmu, w funkcji.Wywołanie "imdbapi.com" z jquery

Próbowałem:

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

Ale ja naprawdę nie wiem, jak "powrót" dane mam od .ajax() ...

edit IMDBapi zwraca zestaw danych json, jak w:

{"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: To działało:

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

Istnieje tam problem z domeną krzyżową ... – Neal

+1

, więc plakat jest następującą częścią danych, prawda? '" Plakat ":" http://ia.media-imdb.com/images/M/[email protected]@._V1._SX320.jpg "' –

+0

Używa JSONP. – SLaks

Odpowiedz

3

Można "t.

AJAX to asynchroniczny; dostaniesz odpowiedź od serwera dopiero po powrocie funkcji.

Zamiast tego możesz sprawić, że twoja funkcja akceptuje wywołania zwrotnego, tak jak robi to $.ajax.

+0

Oooooh * to * dlaczego nie ma powrotu, ale oddzwanianie! :) – Manu

+1

Tak. Jeśli coś wydaje się niezwykle trudne, zwykle jest ku temu powód. – SLaks

2

Można zrobić:

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

Aby uniknąć ograniczeń granic domeny (ponieważ API wydaje się wspierać ją) używać

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

Spróbuj tego:

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

    }); 
} 

Można odbierać i dane tak jak list.