通过jQuery.ajax在Firefox中加载客户端JSON时出现"格式不正确"的警告

Zha*_*ami 14 ajax jquery json firefox3.6 mime-types

我正在使用jQuery的ajax方法来获取静态JSON文件.数据从本地文件系统加载,因此没有服务器,因此我无法更改MIME类型.

这在Safari中运行良好,但Firefox(3.6.3)报告该文件"格式不正确".我知道并在Stack Overflow上查看了类似的帖子:

使用XMLHttpRequest加载JSON文件时,Firefox中的"格式不正确"错误

我相信我的JSON格式正确:

{
    "_": ["appl", "goog", "yhoo", "vz", "t"]
}
Run Code Online (Sandbox Code Playgroud)

我的ajax电话很简单:

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

如果我用文档标记包装JSON:

<document>JSON data</document>
Run Code Online (Sandbox Code Playgroud)

正如上面引用的其他Stack Overflow问题中所提到的,ajax调用失败并出现解析错误.

那么:有没有办法在读取客户端JSON文件时避免Firefox警告?

Rya*_*yan 47

有时使用HTTP服务器不是一个选项,这可能意味着不会为某些文件自动提供MIME类型.改编自Peter Hoffman对jQuery的回答.getJSON Firefox 3语法错误未定义,在进行任何$ .getJSON()调用之前使用此代码:

$.ajaxSetup({beforeSend: function(xhr){
  if (xhr.overrideMimeType)
  {
    xhr.overrideMimeType("application/json");
  }
}
});
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用$ .ajax():

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

  • 值得注意的是,2016年使用$ .getJSON()似乎仍然需要这样做. (5认同)
  • @ALFlanagan我仍然感到惊讶,这仍然是收到赞成票.我对它带来的分数感到高兴,但我很遗憾通过自动检测本地文件请求,它没有以其他方式解决. (2认同)