2010-02-17 89 views
4

我有一个函数检索json数据并给出警报的两个示例。getJSON:为什么1个例子工作,但其他不是?

在这个例子中,一切顺利: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上,但在我的电脑上有一个htm文件),这也不起作用。

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

回答

8

您使用的是您的域名,这意味着$.getJSON将不使用的XmlHttpRequest之外的URL,但有些JSONP - 看到documentation of $.getJSON

如果指定的URL是一个远程 服务器上时,请求将被视为 JSONP。请参阅 的讨论$.ajax()中的jsonp数据类型为 更多详细信息。


如果你把jsonp选项$.ajax的文件一看,你会看到:

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

而对于jsonpCallback选项:

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

对于您的第一个请求,URL中有一个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

我想这事做的事实在第二请求不做你想做的事?

+0

我接着说:&回调='第二url,而现在它的作品完美的罚款? – Natrium 2010-02-17 08:01:17

+0

感谢您的确认:-) *(我没有尝试;很高兴知道它的工作原理!)* – 2010-02-17 08:02:35

1

您使用的是您的域名,这意味着$.getJSON不会使用XmlHttpRequest之外的URL,但有些JSONP - 见$ .getJSON的文档:

如果指定的URL是一个遥控器上服务器,请求将被视为 JSONP。有关更多详细信息,请参阅$ .ajax() 中关于jsonp数据类型的讨论。

如果你采取$阿贾克斯的JSONP选项的文件一看,你会看到:

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

而对于jsonpCallback选项:

相关问题