«не правильно сформированное» предупреждение при загрузке клиентского JSON в Firefox через jQuery.ajax - PullRequest
14 голосов
/ 12 апреля 2010

Я использую ajax-метод jQuery для получения статического файла 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 на стороне клиента?

Ответы [ 2 ]

47 голосов
/ 20 ноября 2010

Иногда использование HTTP-сервера не является опцией, что может означать, что типы MIME не будут автоматически предоставляться для некоторых файлов. Адаптировано из ответа Питера Хоффмана для jQuery .getJSON. Firefox 3 Синтаксическая ошибка не определена . Используйте этот код перед выполнением любых вызовов $ .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
});
0 голосов
/ 12 апреля 2010

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

...