Jquery getJSON:为什么1个示例有效,而另一个不有效?

Jquery getJSON:为什么1个示例有效,而另一个不有效?,jquery,json,Jquery,Json,我有两个函数示例,用于检索json数据并发出警报 在本例中,一切正常: 但在第二个示例中,没有显示警报。 为什么?唯一的区别是检索json的服务。json对象在我看来非常有效: 我没有JS错误。我也试过这个本地的(所以不是在JSbin上,而是在我的pc上有一个htm文件),但这也不起作用 有人能解释一下我做错了什么吗?您使用的URL不在您的域内,这意味着$。getJSON不会使用XmlHttpRequest,而是一些JSONP--请参阅: 如果指定的URL位于远程服务器上 服务器,请求被视为 而

我有两个函数示例,用于检索json数据并发出警报

在本例中,一切正常:

但在第二个示例中,没有显示警报。 为什么?唯一的区别是检索json的服务。json对象在我看来非常有效:

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


有人能解释一下我做错了什么吗?

您使用的URL不在您的域内,这意味着
$。getJSON
不会使用XmlHttpRequest,而是一些JSONP--请参阅:

如果指定的URL位于远程服务器上 服务器,请求被视为 而是JSONP。参见对 的
$.ajax()
中的jsonp数据类型 更多细节


如果您查看的
jsonp
选项的文档,您将看到:

重写中的回调函数名 jsonp请求。此值将为 在中使用,而不是“回调” “callback=?”是查询字符串的一部分 在GET的url或 邮递所以{jsonp:'onJsonPLoad'}会 “onJsonPLoad=?”中的结果传递给 服务器

对于
jsonpCallback
选项:

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

对于第一个请求,URL中有一个
jsoncallback
参数;对于第二个请求,没有此类参数:

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

我想这与第二个请求不能满足您的要求有关?

您使用的URL不在您的域内,这意味着
$。getJSON
不会使用
XmlHttpRequest
,而是一些
JSONP
——请参阅$.getJSON的文档:

如果指定的URL位于远程服务器上,则该请求将被视为 而是JSONP。请参阅$.ajax()中对jsonp数据类型的讨论 更多细节

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

重写jsonp请求中的回调函数名。此值 将在函数的“callback=?”部分中使用而不是“callback” url中的GET查询字符串或POST数据。所以 {jsonp:'onJsonPLoad'}将导致将'onJsonPLoad=?'传递给 服务器


对于jsonpCallback选项:

我在第二个url中添加了
&callback=?
,现在它工作得非常好。感谢您的确认:-)(我没有尝试;很高兴知道它能工作!)
$(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);
  });
});
$(document).ready(function(){
  var timeService = "http://json-time.appspot.com/time.json?tz=Europe/Brussels";

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