2010-11-19 86 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