开发者

getJSON: why does the 1 example work, but the other not?

I have 2 examples of a function that retriev开发者_如何学Ces json-data and gives an alert.

In this example, everything goes fine: http://jsbin.com/uwupa3/edit

$(document).ready(function(){
  var timeService = "http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?";

  $.getJSON(timeService, function(data) {
    alert(data);
  });
});

But in the second example, there is no alert displayed. Why? The only difference is the service where the json is retrieved. The json-object looks perfectly valid to me: http://jsbin.com/uwupa3/2/edit

$(document).ready(function(){
  var timeService = "http://json-time.appspot.com/time.json?tz=Europe/Brussels";

  $.getJSON(timeService, function(data) {
    alert(data);
  });
});

I get no JS-errors. I also tried this local (so not on JSbin but with a htm-file on my pc) and this doesn't work either.

Can someone explain what I am doing wrong?


You are using an URL that's outside your domain, which means $.getJSON will not use an XmlHttpRequest, but some JSONP -- see the documentation of $.getJSON :

If the specified URL is on a remote server, the request is treated as JSONP instead. See the discussion of the jsonp data type in $.ajax() for more details.


And if you take a look on the documentation of the jsonp option for $.ajax, you'll see :

Override the callback function name in a jsonp request. This value will be used instead of 'callback' in the 'callback=?' part of the query string in the url for a GET or the data for a POST. So {jsonp:'onJsonPLoad'} would result in 'onJsonPLoad=?' passed to the server.

And for the jsonpCallback option :

Specify the callback function name for a jsonp request. This value will be used instead of the random name automatically generated by jQuery.

For your first request, there is a jsoncallback parameter in the URL ; for your second request, there is no such parameter :

  • First URL : http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?
  • Second URL : http://json-time.appspot.com/time.json?tz=Europe/Brussels

I suppose this has something to do with the fact the second request doesn't do what you want ?


You are using an URL that's outside your domain, which means $.getJSON will not use an XmlHttpRequest, but some JSONP -- see the documentation of $.getJSON :

If the specified URL is on a remote server, the request is treated as JSONP instead. See the discussion of the jsonp data type in $.ajax() for more details.

And if you take a look on the documentation of the jsonp option for $.ajax, you'll see :

Override the callback function name in a jsonp request. This value will be used instead of 'callback' in the 'callback=?' part of the query string in the url for a GET or the data for a POST. So {jsonp:'onJsonPLoad'} would result in 'onJsonPLoad=?' passed to the server.

And for the jsonpCallback option :

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜