如何解析api.themoviedb.org返回的JSONP响应?

时间:2012-03-11 16:23:08

标签: javascript ajax api

我正在使用themoviedb.org API来获取电影信息。这是我正在使用的代码:

var req = new XMLHttpRequest();
req.open("GET", "http://api.themoviedb.org/2.1/Movie.search/en/json/XXX/immortals?callback=foobar", true);
req.send();
req.onreadystatechange=function() {
   if (req.readyState==4 && req.status==200) {
      console.log(req.responseText); 
   }
}

我在控制台中收到了这个回复:

foobar([{"score":null,"popularity":3,"translated":true,"adult":false,"language":"ru","original_name":"Immortals","name":"Immortals","alternative_name":"\"War of the Gods\"","movie_type":"movie","i".......}])

如何解析此响应以获取name属性?


更新

谢谢大家,但实际答案是hippietrail给出的。

eval(req.responseText)

更多详情:Filtering to specific nodes in JSON - use grep or map?

3 个答案:

答案 0 :(得分:3)

将此功能添加到您的页面:

(我看到它的数组 - 所以我会迭代每个项目...... - 如果你只想要第一个 - 所以请指明。)

  function foobar(x)
    {
        $.each(x, function ()
        {
           alert(this.score);
        });

    }

http://jsbin.com/ojomej/edit#javascript,html

答案 1 :(得分:3)

您正在使用的URL用于JSONP调用(请参阅:http://en.wikipedia.org/wiki/JSONP)。当不允许通过XMLHttpRequest进行跨域请求时使用JSONP。但是你已经在使用XMLHttpRequest,所以我相信你不需要JSONP调用。因此,如果从URL中删除查询字符串:

var req = new XMLHttpRequest();
req.open("GET", "http://api.themoviedb.org/2.1/Movie.search/en/json/XXX/immortals", true);

req.onreadystatechange=function() {
   if (req.readyState==4 && req.status==200) {
      console.log(req.responseText); 
   }
}

req.send();

你应该得到一个JSON字符串:

[{"score":null,"popularity":3,"translated":true,"adult":false,"language":"ru","original_name":"Immortals","name":"Immortals","alternative_name":"\"War of the Gods\"","movie_type":"movie","i".......}]

您可以使用JSON.parse进行解析(请参阅:https://developer.mozilla.org/en/JSON):

var data = JSON.parse(req.responseText);

现在你有一个JavaScript对象,在你的情况下是一个对象数组,你可以使用:

console.log(data[0].name) // "Immortals"

但是,因为问题是tagget“jquery”,如果你正在使用那个库,你可以简化很多:

$.getJSON("http://api.themoviedb.org/2.1/Movie.search/en/json/XXX/immortals", function (data) {
    console.log(data[0].name)
});

jquery还会处理浏览器差异(例如,如果浏览器不支持JSON对象)。

希望它有所帮助。

答案 2 :(得分:0)

我没有API密钥来测试它,但似乎你对jQuery和JSON都不是很熟悉。无论如何,这样的事情可能会让你开始:

$.getJSON("http://api.themoviedb.org/2.1/Movie.search/en/json/XXX/immortals?callback=?",
   function(data) {
      alert(data[0].name);
   }
);