如何使用jquery对api进行jsonp调用

时间:2010-11-19 01:53:01

标签: jquery api jsonp

我是一般的编程新手,当我打电话给moviedb.org api时,我无法将数据导入我的网络应用程序。我正在使用jquery,我已阅读所有文档,甚至是食谱,我仍然在努力使这项工作,我还检查了我的谷歌开发工具控制台,它显示调用成功:

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>

我认为我搞乱了回调功能,任何想法都会受到赞赏。 提前谢谢!

3 个答案:

答案 0 :(得分:3)

简而言之,您所服务的服务器似乎不支持JSONP,这是必须存在的服务器端功能......而不是。我也没有在他们的API文档或论坛中看到过。该URL应为?callback=?,因为它是唯一的查询字符串参数,如下所示:

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

...但由于服务器不支持,因此仍无效。暂时不说:很多时候,使用API​​密钥的东西不支持JSONP(因为客户端会有密钥),如果API使用密钥限制访问...其他使用它只是为了跟踪可能不在乎。

答案 1 :(得分: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);

答案 2 :(得分: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");

有了这个,你真的知道什么是“数据”。

我希望你能提供帮助。