Я пытаюсь выяснить, как использовать URL-адреса json в браузере и отображать данные на моих веб-страницах с помощью DOM. Я не получаю последовательного или предсказуемого ответа.jQuery - потребляющие ресурсы JSON - некоторые возвращаемые данные, другие - нет. Зачем?
Я нашел JSON URL at Google Calendar, который показывает json-ответ в моем браузере, если я просто набираю URL-адрес в адресной строке.
Я нашел еще один JSON URL at 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/[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, ничего в тексте ответа).
Каким образом оба URL JSON вернули хорошие данные JSON в браузере, но только URL-адрес Google Calendar мог быть использован jQuery.ajax, в то время как URL-адрес business.gov не мог быть использован jquery.ajax?
EDIT - 19 июня 2010, 6:36 EST - Спасибо @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');
}
}
);
Я использую dataType 'jsonp' или 'script', я получаю тот же результат. htmlobj2 равен нулю, но заголовок ответа содержит всю строку данных json. Кроме того, если я пытаюсь связать функцию обратного вызова с вызовом .ajax с «данными» в качестве параметра, этот параметр «data» также является объектом nil. Кроме того, не вызван ни обработчик успеха, ни неудачник.
Как я могу извлечь данные JSON из строки ответа и представить ее на моей веб-странице?
EDIT - 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 Calendar.
Нижняя линия? Я смог использовать ресурсы JSON (api.business.gov и Google Calendar), используя Ruby, но только ресурс Календаря Google, используя Javascript/jQuery в своем браузере.
Буду признателен за любую информацию, которую я могу получить. Из любой документации в Интернете или описания API не ясно, почему канал Google Calendar работает в браузере независимо от того, что, но фид api.business.gov не работает в браузере, используя JSON или JSONP.
ли корма business.gov требуют конкретные пункты (например, ключ) в строке запроса, которые вы не предоставляют? Это была бы моя первая остановка. –
@Rob Allen - business.gov не запрашивает ключ API или что-то еще. Фактически, если вы поместите http://api.business.gov/geodata/city_county_links_for_state_of/CA.jsonin в свою адресную строку браузера, вы получите ответ в JSON. –
Ruby работает на стороне сервера и не будет иметь клиентский скрипт ограничения перекрестного домена. Вы находитесь на правильном пути здесь ... Используйте код сервера, чтобы вызвать веб-службу business.gov. – offner