Я пытаюсь выяснить, как использовать URL-адреса json в браузере и отображать данные на моих веб-страницах с помощью DOM.Я не получаю последовательного или предсказуемого ответа.
Я нашел JSON-URL в Календаре Google , который показывает ответ json в моем браузере, если я просто набрал URL-адрес в адресной строке.
Я нашел другой JSON URL на business.gov , который показывает другой ответ json в моем браузере, если я просто наберу URL в адресной строке.,
Затем я попытался использовать 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/developer-calendar@google.com/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>
Ресурс JSON Календаря Google использовался нормально, но ресурс JSON business.gov даже не вернулся в ответе.(Я проверил с Firebug, и он возвратил HTTP-код 200 без текста в ответе).
Как получается, что оба URL-адреса JSON возвращают хорошие данные JSON в браузере, но jQuery.ajax может использовать только URL-адрес Календаря Google, в то время как URL-адрес business.gov не может использоваться jQUery.ajax?
РЕДАКТИРОВАТЬ - 19 июня 2010 г., 6:36 EST - Спасибо @ Хуан Мануэль и @ 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');
}
}
);
Использую ли я dataType 'jsonp' или 'script', я получаю одинаковый результат.htmlobj2 равен nil, но заголовок ответа содержит всю строку данных json.Более того, если я попытаюсь связать функцию обратного вызова с вызовом .ajax с «данными» в качестве параметра, этот параметр «данных» также будет нулевым объектом.Кроме того, не вызывается ни обработчик успеха, ни неудачи.
Как мне извлечь эти данные JSON из строки ответа и представить их на моей веб-странице?
РЕДАКТИРОВАТЬ - 22 июня 2010 г., 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, чтобы также использовать URL-адрес Календаря Google.
Итог?Я смог использовать оба JSON-ресурса (api.business.gov и Google Calendar), используя Ruby, но только ресурс Google Calendar, использующий Javascript / jQuery в моем браузере.
Буду признателен за любую информацию, которую смогу получить.Из документации в Интернете и описаний API не ясно, почему фид Google Calendar работает в браузере, несмотря ни на что, но фид api.business.gov не работает в браузере с использованием JSON или JSONP.