Синтаксическая ошибка jQuery getJSON в действительном JSON

У меня есть следующие действительные данные json

[  
   {  
      "title":"title1",
      "value":12234
   },
   {  
      "title":"title2",
      "value":"some text"
   },
   {  
      "title":"title3",
      "value":"12qwerty234"
   },
   {  
      "title":"title4",
      "value":123.5
   }
]   

Я использую jQuery для его загрузки. Вот код:

$(document).ready(function(){
    $.getJSON("json.js", {},function(result){
        $.each(result, function(i, obj) {
            $("form").append($('<label for="'+i+'">'+obj.title+'</label>'));
            $("form").append($('<input id="'+i+'" value="'+obj.value+'" type="text"/><br>'));
        });
    });
});

Моя проблема в том, что я получаю синтаксическую ошибку в Firefox. Я загружаю json.json в качестве локального файла. Вот скриншот (ошибка говорит "синтаксическая ошибка в строке 1" ) enter image description here

Обратите внимание: эта форма успешно сгенерирована.

Изменить: Вот еще один снимок экрана из Chrome при запуске python SimpleHTTPServer: enter image description here

Ответы

Ответ 1

Причина этого в том, что вы используете локальный файл, поэтому подразумевается тип mime "text/xml", и, следовательно, Firefox попытается проанализировать его как XML в .responseXML базового объекта XHR. Это, конечно, не удается.

Вы можете просто проигнорировать это или указать mimeType самостоятельно:

$.ajax({
    dataType: "json",
    url: "json.json",
    mimeType: "application/json",
    success: function(result){
        $.each(result, function(i, obj) {
            $("form").append($('<label for="'+i+'">'+obj.title+'</label>'));
            $("form").append($('<input id="'+i+'" value="'+obj.value+'" type="text"/><br>'));
        });
    }
});

PS: Используя простой XHR, вы бы использовали overrideMimeType()

Ответ 2

Я запустил тот же код на веб-сервере, и не возникла синтаксическая ошибка. Хотя он генерирует синтаксическую ошибку при загрузке из файла:///. SO, это в основном "схема".

Ответ 3

Я думаю, ошибка, созданная из-за json файла, является локальным файлом. Попробуйте загрузить ваш веб-сервер, например nginx или apache.