Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to query the Facebook Graph API with JSONP

Shouldn't follow AJAX request with JQuery work?

$.getJSON('https://graph.facebook.com/138654562862101/feed?callback=onLoadJSONP');

I have defined a callback function named onLoadJSONP.

But Chrome gives me a typical Same-Origin-Policy error:

XMLHttpRequest cannot load https://graph.facebook.com/138654562862101/feed?callback=onLoadJSONP. Origin null is not allowed by Access-Control-Allow-Origin.

I thought JSONP worked around that, what am I doing wrong?

like image 295
Sander Versluys Avatar asked Jan 12 '11 14:01

Sander Versluys


People also ask

How do I get Facebook Page Insights on graph API?

You can access Page Insights by typing /insights after the name of your page in the URL field. This command will retrieve all of the Insights associated with your Page. Type "/insights" after your company name. Click the Submit button.

How do I pull data from Facebook?

If you want to download a copy of your information from Facebook, you can use the Download Your Information tool. Tap in the top right of Facebook. Scroll down and tap Settings. Scroll down to Your Facebook Information and tap Download Your Information.


2 Answers

jQuery detects JSONP desired behavior specifically with callback=?, so you'll need exactly that, then pass the function you want to handle it. With no outside changes, you could do this:

$.getJSON('https://graph.facebook.com/138654562862101/feed?callback=?', onLoadJSONP);

This allows the search for callback=? to still work by using your function as the callback directly. Previously, it wasn't detecthing that you wanted a JSONP fetch, and was trying to use an XMLHttpRequest to grab the data...which fails due to the same origin policy restriction.

like image 166
Nick Craver Avatar answered Nov 06 '22 02:11

Nick Craver


It has to be "callback=?" and then you define the callback as the last parameter of the request.

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?",
  {
    tags: "cat",
    tagmode: "any",
    format: "json"
  },
  function(data) {
    $.each(data.items, function(i,item){
      $("<img/>").attr("src", item.media.m).appendTo("#images");
      if ( i == 3 ) return false;
    });
  });
like image 4
davidbuttar Avatar answered Nov 06 '22 02:11

davidbuttar