Кто-нибудь может помочь мне разобраться в проблеме AJAX (JSON)?

#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: Спасибо, что указали на это, я смотрел на эти диаграммы в абсолютном замешательстве. Думаю, теперь я действительно это понимаю.