2013-01-23 78 views
0

我的JSON有什麼問題嗎?JSON不適用於JQuery

http://codepen.io/anon/pen/Ieyvl

var url = "http://x.com/json.js"; 

$.getJSON(url, function(response){ 
    alert("worked!"); 
    alert(response); 
}); 

如果它是一個 「跨域」 的問題,那麼爲什麼工作的呢?

http://codepen.io/anon/pen/BHshC

var url = "http://gdata.youtube.com/feeds/api/playlists/PL3E245DF445E37F50?v=2&alt=jsonc"; 

$.getJSON(url, function(response){ 
    alert("worked!"); 
    alert(response); 
}); 
+0

use console.log(response); – salexch

+1

執行該代碼的頁面的域是什麼?您可能會遇到[同源策略](http://en.wikipedia.org/wiki/Same_origin_policy)。 –

+0

沒有..只是在jsonlint.com檢查它,它通過..所以它應該很好..這可能是一個跨域問題 –

回答

3

查看控制檯:

的XMLHttpRequest無法加載 http://xml.hosting.subsplash.com/5KQ4CM/json.js。來源 http://secure.codepen.io不允許通過 訪問控制允許來源。

閱讀關於same origin policy

如果他們支持它,你需要使用JSONP。如果服務器支持的話看看CORS


[編輯]

我沒有檢查,但如果谷歌示例工作,很可能是因爲谷歌已啓用CORS該資源。這意味着支持它的瀏覽器可以通過Ajax調用請求資源。並非所有瀏覽器都支持該類型的握手請求。 [看着你年長的IE]

+0

+1雖然這是主要問題 –

0

它是有效的JSON,也許jQuery有問題,因爲它返回的MIME類型應用程序/ JavaScript的,而不是應用程序/ JSON

+0

+1這也是真的..它試圖加載它作爲'應用程序/ JavaScript' –

+0

應用程序/ JavaScript應該工作得很好。 –

0

如果你讀jQuery.getJSON()在http://api.jquery.com/jQuery.getJSON/文件,
它說以下內容: 由於瀏覽器的安全限制,大多數「Ajax」的請求都受到同源策略;該請求無法成功從不同的域,子域或協議中檢索數據。 還要記住:從jQuery 1.4開始,如果JSON文件包含語法錯誤,請求通常會自動失敗。

0

託管服務器沒有正確處理響應類型,另外您需要將其作爲JSONP或使用getJSON add?callback =?到最後你的網址。

var url = "http://xml.hosting.subsplash.com/5KQ4CM/json.js?callback=?"; 

$.getJSON(url, function(response){ 
    alert("worked!"); 
    alert(response); 
});