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

时间:2010-02-17 07:49:35

标签: 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);
  });
});

但在第二个例子中,没有显示警告。 为什么?唯一的区别是检索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);
  });
});

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

有人可以解释我做错了吗?

2 个答案:

答案 0 :(得分:8)

您正在使用域外的网址,这意味着$.getJSON不会使用XmlHttpRequest,而是使用某些JSONP - 请参阅documentation of $.getJSON

  

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


如果您查看$.ajaxjsonp选项的文档,您会看到:

  

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

对于jsonpCallback选项:

  

指定回调函数名称   一个jsonp请求。这个值将是   用来代替随机名称   由jQuery自动生成。

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

  • 第一个网址: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

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

答案 1 :(得分:1)

您使用的是域外的网址,这意味着$.getJSON不会使用XmlHttpRequest,而是会使用JSONP - 请参阅$ .getJSON的文档:

  

如果指定的URL位于远程服务器上,则将该请求视为   相反,JSONP。请参阅$ .ajax()中对jsonp数据类型的讨论   了解更多详情。

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

  

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

对于jsonpCallback选项: