admin管理员组

文章数量:1318156

I'm using themoviedb API to fetch the movie info. This is the code I'm using:

var req = new XMLHttpRequest();
req.open("GET", ".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); 
   }
}

And I'm getting this response in the console:

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".......}])

How do I parse this response to get the name attribute?


Updates:

Thank you everybody but the actual answer was given by hippietrail.

eval(req.responseText)

More details: Filtering to specific nodes in JSON - use grep or map?

I'm using themoviedb API to fetch the movie info. This is the code I'm using:

var req = new XMLHttpRequest();
req.open("GET", "http://api.themoviedb/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); 
   }
}

And I'm getting this response in the console:

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".......}])

How do I parse this response to get the name attribute?


Updates:

Thank you everybody but the actual answer was given by hippietrail.

eval(req.responseText)

More details: Filtering to specific nodes in JSON - use grep or map?

Share Improve this question edited May 23, 2017 at 12:04 CommunityBot 11 silver badge asked Mar 11, 2012 at 16:23 codef0rmercodef0rmer 10.5k9 gold badges54 silver badges78 bronze badges 3
  • 1) You've passed a callback function name (callback=foobar), but you haven't provided that callback function. 2) You're doing a JSON call (GET) but the API provides JSONP, which requires a script tag injection instead. The API doesn't support CORS anyway so JSONP is your only option. – hippietrail Commented Mar 11, 2012 at 16:44
  • Possible duplicate: How to make a jsonp call to an api using jquery – hippietrail Commented Mar 11, 2012 at 16:58
  • 1 Also related: Filtering to specific nodes in JSON - use grep or map? – hippietrail Commented Mar 11, 2012 at 19:01
Add a ment  | 

3 Answers 3

Reset to default 3

add this function to your page :

( i see its an array - so i'll iterate each item... - if you want the first one only - so please specify.)

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

    }

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

The URL you're using is for a JSONP call (see: http://en.wikipedia/wiki/JSONP). JSONP is used when cross domain request through XMLHttpRequest are not allowed. But you're using XMLHttpRequest already so I believe you don't need a JSONP call. So, if you remove the querystring from the URL:

var req = new XMLHttpRequest();
req.open("GET", "http://api.themoviedb/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();

You should get a JSON string:

[{"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".......}]

That you can parse using JSON.parse (see: https://developer.mozilla/en/JSON):

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

Now you have a JavaScript object, in your case an array of objects, that you can use:

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

However, because the question is tagget "jquery", if you're using that library you can simplify a lot:

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

jquery will also take care of the browsers differences (e.g if the browser doesn't support JSON object).

Hope it helps.

I don't have an API key to test this, but it seems you're not very familiar with either jQuery nor JSON. Anyway something like this might get you started:

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

本文标签: javascriptHow to parse JSONP response returned by apithemoviedborgStack Overflow