89

Can you give a very simple example of reading a jsonp request with jquery? I just can't get it to work.

akula1001
  • 4,576
  • 12
  • 43
  • 56

1 Answers1

144

Here is working example:

<html><head><title>Twitter 2.0</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
</head><body>
<div id='tweet-list'></div>
<script type="text/javascript">
$(document).ready(function() {
    var url =  "http://api.twitter.com/1/statuses/user_timeline/codinghorror.json";
    $.getJSON(url + "?callback=?", null, function(tweets) {
        for(i in tweets) {
            tweet = tweets[i];
            $("#tweet-list").append(tweet.text + "<hr />");
        }
    });
});
</script>
</body></html>

Notice the ?callback=? at the end of the requested URL. That indicates to the getJSON function that we want to use JSONP. Remove it and a vanilla JSON request will be used. Which will fail due to the same origin policy.

You can find more information and examples on the JQuery site: http://api.jquery.com/jQuery.getJSON/

Tomas Sedovic
  • 42,675
  • 9
  • 40
  • 30
  • 2
    I was trying out $.ajax with those jsonp parameters and could not get that to work. Anyway, this works nicely, thanks. – akula1001 Apr 23 '10 at 15:13
  • 2
    Does the `?callback=?` actually get sent as part of the URL or is it just a kind of flag that jQuery sees and the strips off before fetching the URL? – hippietrail Nov 23 '11 at 18:31
  • 1
    What is necessary if your URL requires parameters? (ex: `?p=1&s=50`) – ONDEV Dec 05 '11 at 21:49
  • 2
    I found this to be a good reference as a starting point. To answer above: Yes, the callback does get sent as a parameter and should be sent back as a function wrapped around the JSON response. See http://stackoverflow.com/questions/7936610/json-uncaught-syntaxerror-unexpected-token. To send additional parameters they are sent in the second parameter of the getJSON(), in the above ex. replace null with {p:1,s:50} – Ecropolis Sep 19 '12 at 11:53
  • I get error code 410 - gone. Is there an "eternally" present service returning JSON anywhere? Just so one can test that the own method works? – Konrad Viltersten Jun 19 '13 at 21:17
  • i ran you code in my chrome browser and its showing following error in console :Resource interpreted as Script but transferred with MIME type text/html. Uncaught SyntaxError: Unexpected token < .....FYI its also showing syntax error( ) in firefox. – r.bhardwaj Jun 26 '13 at 11:03
  • Konrad: Twitter's API changes have been big news lately; they're shutting out some of their old, open services and forcing people to register to see data. [There's a question](http://stackoverflow.com/questions/8292050/is-there-any-public-accesible-json-data-source-to-test-treeview-user-control) like yours that used to point to Twitter. I've since added the Tumblr API, which looks like `http://puppygifs.tumblr.com/api/read/json`. – Coderer Jul 11 '13 at 10:00
  • JSONP If the URL includes the string "callback=?" (or similar, as defined by the server-side API), the request is treated as JSONP instead. See the discussion of the jsonp data type in $.ajax() for more details. – The Demz Sep 03 '13 at 16:30
  • How do you make the php side of this to call the callback function when it doesn't have a name? – Curtis Jul 14 '14 at 18:22