#javascript #ajax #json #jquery
#javascript #ajax #json #jquery
Вопрос:
Моя цель — создать персональное приложение из моего видеоплеера ActionScript3. Я хочу иметь возможность хранить один swf-файл в своем браузере и через AJAX передавать .swf URL-адрес к моим видео. Я решил использовать JSON в качестве своих данных.
Я новичок в JSON и я натолкнулся на стену. Это кажется совершенно простым, но сначала я даже не смог получить свой локальный хостинг.файл json в моем веб-приложении. Это работало, когда я пытался сделать это с помощью XML. После кучи устранения неполадок, теперь он фактически получает мой XMLHttpRequest.
Я пытаюсь максимально сохранить обратную совместимость, и поэтому я использую json2.js библиотека для защиты этого понятия.
Моя текущая проблема заключается в невозможности проанализировать мой XMLHttpRequest. Честно говоря, я даже не уверен, правильно ли то, что я делаю, поскольку везде, где я ищу примеры, почти все они указывают на решение, которое записывает JSON на реальную веб-страницу.
Мой внешний файл JSON: test.json.
{ "video":"test.f4v", "thumb":"test.jpg", "title":"The test", "caption":"TEST TEST TEST TEST TEST", "minutes":01, "seconds":43 }
Я уверен, что файл JSON действителен.
Вот мой html / javascript:
<script type="text/javascript" src="js/json2.js"></script>
<script type="text/javascript">
window.onload = initAll();
function initAll(){
var jsonData = {};
var xhr = false;
if(window.XMLHttpRequest){ //Chrome, Firefox, Opera, Safari, IE7
xhr = new XMLHttpRequest();
} else if(window.ActiveXObject){ //IE5 IE6
try{
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e){
try{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
alert("Could not make XMLHttpRequest");
}
}
}
if(xhr){
xhr.open("GET", "js/ajax/test.json", true);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 amp;amp; xhr.status == 200){
try{
jsonData = JSON.parse(xhr.responseText);
alert(jsonData.title);
document.getElementById("vidtitle").innerHTML = xhr.responseText.title;
document.getElementById("vidcaption").innerHTML = jsonData.caption;
} catch(e){
alert("Unable to parse jsonData.");
}
}
};
xhr.send(null);
}
}
</script>
</head>
<body><div class="vidcontent">
<h2 id="vidtitle"></h2>
<p id="vidcaption"></p>
Я делаю это локально на своем сервере, но я загрузил файлы на свой веб-хост и все еще получаю те же проблемы.
Firebug сообщает мне, что у него есть данные, и я даже могу прочитать их через консоль. Теперь код работает в Firefox, но не в Chrome или IE8 (IE8 работает иногда, когда я перевожу его в режим совместимости, но не всегда <.< ) Я не могу протестировать в Safari или Opera прямо сейчас.
Есть ли какой-нибудь способ заставить это работать в этих браузерах? Я попытался использовать $.parseJSON в библиотеке jQuery, но с этим у меня тоже возникли проблемы. Меня также интересует jQuery, если кто-нибудь может объяснить решение с его помощью.
Ответ №1:
Ваш JSON неверен:http://www.jsonlint.com /
Очевидно, что начальные 0 не допускаются в числах.
Комментарии:
1. Ого. Я проверил это с помощью: jsonformatter.curiousconcept.com ранее и он распознал, что я пропустил запятую, однако, он этого не обнаружил. Достаточно шокирующе, что проблема была устранена в Chrome и IE8. Он запускает страницу в режиме совместимости в IE8, и если я выключу его и снова включу, он больше не будет работать. Но кто бы это сделал?
2. @TomStevens: Вы также можете взглянуть на спецификацию: json.org (последняя диаграмма). Если число начинается с
0
, за ним должна следовать десятичная точка.3. @FelixKling: Спасибо, что указали на это, я смотрел на эти диаграммы в абсолютном замешательстве. Думаю, теперь я действительно это понимаю.