"плохо сформированное" предупреждение при загрузке JSON на стороне клиента в Firefox через jQuery.ajax

Я использую метод jQuery ajax для получения статического файла JSON. Данные загружаются из локальной файловой системы, поэтому нет сервера, поэтому я не могу изменить тип MIME.

Это отлично работает в Safari, но Firefox (3.6.3) сообщает, что файл "не правильно сформирован". Я знаю и рассмотрел аналогичную статью здесь, в разделе "Переполнение стека":

"неправильно сформированный" ошибка в Firefox при загрузке файла JSON с XMLHttpRequest

Я считаю, что мой JSON хорошо сформирован:

{
    "_": ["appl", "goog", "yhoo", "vz", "t"]
}

Мой вызов ajax прост:

$.ajax({
    url: 'data/tickers.json', 
    dataType: 'json',
    async: true,
    data: null,
    success: function(data, textStatus, request) {
        callback(data);
    }
});

Если я обернуваю JSON тегом документа:

<document>JSON data</document>

как было упомянуто выше в другом вопросе, вызов ajax завершился с ошибкой синтаксического анализа.

Итак: есть ли способ избежать предупреждения Firefox при чтении в клиентских JSON файлах?

Ответ 1

Иногда использование HTTP-сервера не является вариантом, что может означать, что типы MIME не будут автоматически предоставлены для некоторых файлов. Адаптированный от Peter Hoffman ответ на jQuery.getJSON Firefox 3 Ошибка синтаксиса Undefined, используйте этот код, прежде чем вы совершаете любые вызовы $.getJSON():

$.ajaxSetup({beforeSend: function(xhr){
  if (xhr.overrideMimeType)
  {
    xhr.overrideMimeType("application/json");
  }
}
});

Или, если вы используете $.ajax():

$.ajax({
  url: url,
  beforeSend: function(xhr){
    if (xhr.overrideMimeType)
    {
      xhr.overrideMimeType("application/json");
    }
  },
  dataType: 'json',
  data: data,
  success: callback
});

Ответ 2

Локальные файлы и скрипты не смешиваются. Слишком много средств безопасности браузера и других странностей. Если вы хотите проверить что-то, вы должны запустить свой материал через HTTP-сервер. Установка одной локально может быть хорошей идеей.