代码之家  ›  专栏  ›  技术社区  ›  Natrium

getjson:为什么1个示例有效,而另一个则无效?

  •  4
  • Natrium  · 技术社区  · 15 年前

    我有两个函数示例,用于检索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对象对我来说非常有效: 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上,而是在我的PC上使用一个HTM文件),但这也不起作用。

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

    2 回复  |  直到 13 年前
        1
  •  8
  •   Pascal MARTIN    15 年前

    您使用的URL不在您的域中,这意味着 $.getJSON 不使用xmlhttpRequest,但使用一些jsonp——请参见 documentation of $.getJSON :

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


    如果你看一下 jsonp 选择权 $.ajax 你会看到:

    重写中的回调函数名 JSONP请求。这个值将是 在中使用而不是“callback” “回调=?”查询字符串的一部分 在get的url或 邮政。所以jsonp:'onjsonpload'会 结果为“onjsonPload=?”传递给 服务器。

    为了 jsonpCallback 选项:

    为指定回调函数名 JSONP请求。这个值将是 使用而不是随机名称 由jquery自动生成。

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

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

    我想这和第二个请求不做你想要的有关系吗?

        2
  •  1
  •   Mp0int    13 年前

    您使用的URL不在您的域中,这意味着 $.getJSON 不会使用 XmlHttpRequest 但有些 JSONP --参见$.getjson的文档:

    如果指定的URL位于远程服务器上,则请求将被视为 JSONP代替。请参见$.ajax()中对jsonp数据类型的讨论。 了解更多详细信息。

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

    重写JSONP请求中的回调函数名。这个值 将在“callback=?”中使用而不是“callback”部分 URL中的get或post数据查询字符串。所以 jsonp:'onjsonpload'将导致'onjsonpload=?'传递给 服务器。

    对于jsonpcallback选项: