2010-02-17 124 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選項:

相關問題