getJSON:为什么1个例子有效,但另一个没有?

Nat*_*ium 4 jquery json

我有一个函数示例,它检索json数据并发出警报.

在这个例子中,一切都很顺利: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);
  });
});
Run Code Online (Sandbox Code Playgroud)

但在第二个示例中,没有显示警报.为什么?唯一的区别是检索json的服务.json-object对我来说看起来非常有用: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);
  });
});
Run Code Online (Sandbox Code Playgroud)

我没有JS错误.我也试过这个本地(所以不是在JSbin上,但在我的电脑上有一个htm文件),这也不起作用.

谁能解释我做错了什么?

Pas*_*TIN 8

您正在使用域外的URL,这意味着$.getJSON不会使用XmlHttpRequest,而是使用一些JSONP - 请参阅以下文档$.getJSON:

如果指定的URL位于远程服务器上,则该请求将被视为JSONP.有关$.ajax()更多详细信息,请参阅jsonp数据类型的讨论.


如果您查看该jsonp选项的文档$.ajax,您将看到:

覆盖jsonp请求中的回调函数名称.在'callback =?'中将使用此值代替'callback' GET的url中的查询字符串的一部分或POST的数据.所以{jsonp:'onJsonPLoad'}会导致'onJsonPLoad =?' 传递给服务器.

对于jsonpCallback选项:

指定jsonp请求的回调函数名称.将使用此值代替jQuery自动生成的随机名称.

对于您的第一个请求,jsoncallbackURL中有一个参数; 对于您的第二个请求,没有这样的参数:

  • 第一个网址: http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?
  • 第二个网址: http://json-time.appspot.com/time.json?tz=Europe/Brussels

我想这与第二个请求没有做你想要的事实有关?