我想弄清楚如何在瀏覽器中使用json URL並使用DOM在我的網頁中呈現數據。我沒有得到一致或可預測的答覆。jQuery - 使用JSON資源 - 一些返回數據,其他則不。爲什麼?
我發現了一個JSON URL at Google Calendar,它顯示我的瀏覽器中的json響應,如果我只是在地址欄中輸入網址。
我發現另一個JSON URL at business.gov,如果我只是在地址欄中輸入URL,它會在瀏覽器中顯示不同的json響應。 。
然後我嘗試使用jQuery發出$ .ajax調用來消費和顯示這兩個JSON資源。
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
htmlobj=$.ajax(
{url:"http://www.google.com/calendar/feeds/[email protected]/public/full?alt=json",
async:false}
);
if (jQuery.isEmptyObject(htmlobj.responseText)===true) {
alert("htmlobj.responseText is empty");
} else {
alert("htmlobj.responseText has stuff in it");
}
$("#myDiv").html(htmlobj.responseText).fadeIn();
htmlobj1=$.ajax(
{url:"http://api.business.gov/geodata/city_county_links_for_state_of/CA.json",
async:false,
dataType:'text',
});
if (jQuery.isEmptyObject(htmlobj1.responseText)===true) {
alert("htmlobj1.responseText is empty");
} else {
alert("htmlobj1.responseText has stuff in it");
}
$("#myGovDiv").html(htmlobj1.responseText).fadeIn();
});
</script>
</head>
<body>
<h3>Google Calendar - json only</h3>
<div id="myDiv" style="display:none"></div>
<h3>Business.Gov</h3>
<div id="myGovDiv" style="display:none"></div>
</body>
Google日曆JSON資源消耗良好,但是business.gov JSON資源甚至沒有返回響應。 (我使用Firebug進行了檢查,並在響應文本中返回了HTTP代碼200)。
這兩個JSON URL如何在瀏覽器中返回良好的JSON數據,但只有Google Calendar URL可以被jQuery.ajax使用,而business.gov URL不能被jQUery.ajax使用?
編輯 - 2010年6月19日,美國東部時間6:36 - 謝謝@Juan Manuel和@TheJuice。我試過jsonp ...這是我得到的。
如果我改變調用下面,我能夠讓瀏覽器停止阻止來自api.business.gov的反應,但我不能在數據獲取(如htmlobj2是零)
htmlobj2=$.ajax(
{url:"http://api.business.gov/geodata/city_county_links_for_state_of/CA.json",
async: false,
dataType: 'jsonp',
success: function(data, textStatus) {
alert("Success");
$('#myDiv').html("Your data: ");
},
error: function (XMLHttpRequest, textStatus, errorThrown){
alert('error');
}
}
);
無論我使用'jsonp'還是'script'的dataType,我都會得到相同的結果。 htmlobj2是零,但響應標題具有整個json數據字符串。此外,如果我嘗試用「data」作爲參數將回調函數綁定到.ajax調用,那麼「data」參數也是一個零對象。此外,成功或失敗處理程序都不會被調用。
如何從響應字符串中提取此JSON數據並將其呈現在我的網頁上?
編輯 - 2010年6月22日,上午11點17分
我發現了一個Ruby腳本和調整它來嘗試和消費的URL。我在交互式Ruby(irb)中運行它。
require 'rubygems'
require 'json'
require 'net/http'
url = "http://api.business.gov/geodata/city_county_links_for_state_of/CA.json"
resp = Net::HTTP.get_response(URI.parse(url))
data = resp.body
result = JSON.parse(data)
result.each{|entry| p entry["name"] + "," + entry["full_county_name"] }
我能夠使用類似的Ruby腳本來使用Google Calendar URL。
底線?我能夠使用Ruby來使用JSON資源(api.business.gov和Google日曆),但只能使用瀏覽器中使用Javascript/jQuery的Google日曆資源。
我會很感激我能得到的任何見解。從網絡上的任何文檔或API描述看,似乎並不清楚Google Calendar日曆提要爲何在瀏覽器中運行,但api.business.gov提要在使用JSON或JSONP的瀏覽器中無效。
是否business.gov飼料需要在查詢字符串中的特定項目(如鑰匙),你不提供?那將是我的第一站。 – 2010-06-18 20:02:05
@Rob艾倫 - business.gov不要求API密鑰或任何東西。事實上,如果您在瀏覽器地址欄中放置http://api.business.gov/geodata/city_county_links_for_state_of/CA.json,則會以JSON形式收到回覆。 – 2010-06-19 05:14:30
Ruby正在運行服務器端,不會有跨域限制客戶端腳本。您在這裏正確的道路上...使用服務器代碼來調用business.gov Web服務。 – offner 2010-06-22 17:28:40