2010-11-19 87 views
4

我是一般的編程新手,當我調用moviedb.org api時,我無法將數據導入到我的web應用程序中。我使用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'。 [他們的文檔表示它在V3 API中受支持](http://help.themoviedb.org/kb/api/about-3):'與以前版本的API不同,/ 3僅支持單一格式,JSON 。 XML和YAML支持正在被正式拋棄。這讓我們專注於改進1種單一類型,並增強了重用緩存數據的能力。 JSONP也正式支持,只需添加一個回調參數,你就完成了.' – hippietrail 2012-03-11 20:17:48

回答

3

簡而言之,您所碰到的服務器似乎不支持JSONP,這是服務器端功能必須存在......而不是。我在他們的API文檔或論壇中也看不到任何提及。網址應爲?callback=?,因爲它是唯一的查詢參數,如:

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

...但是,這仍然無法工作,因爲服務器不支持它。正如一邊:許多時間與API密鑰不是要支持JSONP(因爲客戶端將有密鑰),如果API使用密鑰來限制訪問...其他人使用它只是爲了跟蹤可能不在乎。

+0

優秀的尼克! – RubyGladiator 2010-11-19 02:39:06

+0

這是不正確的。 'callback =?'實際上是由jQuery改變的,用生成的函數名稱替換'?'。嘗試用'foobar'替換'?',你會看到返回的有效數據:'http:// api。themoviedb.org/2.1/Movie.getImages/en/json/ed7e2e092ca896037ce13d2bf11a08f1/550&callback = foobar' – hippietrail 2012-03-11 17:07:41

+0

@hippietrail - No ...答案仍然正確,你的網址返回的是**不是** JSONP,它沒有被包裹在'foobar();函數調用中,它只是JSON數據。在說錯了之前對它進行測試:)我知道jQuery如何與JSONP參數一起工作......但是如果你調用的服務器不支持JSONP,那麼這根本就沒有關係,這就是爲什麼這個關注點在這個回答。 – 2012-03-11 19:36:19

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

正如你所看到的,我把同樣的「每個」迭代函數。我不知道你是否正確地做,因爲我不執行此代碼。但我強烈建議您嘗試執行的代碼到函數(數據)......與警報(...),因爲我在下面:

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

有了這個你真的知道什麼的「數據」谷。

我希望你有幫助。

2

首先,你必須確保api的調用支持jsonp(如果沒有,你會看到json,但你將無法做任何事情)。

二。如果您不添加回叫名稱,那麼您將離開?callback =?那麼jQuery將添加一個隨機數到你的網址的結尾,很可能會導致問題。它看起來像這樣:

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

「首先,你必須確保api的調用支持jsonp(如果沒有,你會看到json,但你不能用它做任何事情)。」是的,我在控制檯中看到它,但無法訪問它。我還會看到爲回調函數名稱生成的radom數字。謝謝馬特! – RubyGladiator 2010-11-19 02:39:32

+0

所以現在要訪問它返回的json指定一個回調。所以做這樣的事情:function makeRequest($ .getJSON(「url?callback = someCallback」,{...});)然後有另一個函數稱爲您的回調名稱,所以在這種情況下「someCallback」。函數someCallback {在這裏做你想用的json}如果這不起作用,那麼API不支持jsonp。希望幫助! – Matt 2010-11-19 14:37:53