在通过jQuery.ajax加载客户端JSON时,在Firefox中出现“not well-formed”警告

14
我正在使用jQuery的ajax方法获取静态JSON文件。数据是从本地文件系统加载的,因此没有服务器,所以我无法更改MIME类型。
在Safari中可以正常工作,但Firefox(3.6.3)报告该文件为“格式不正确”。我已经意识到并查看了Stack Overflow上的一个类似帖子: "not well-formed" error in Firefox when loading JSON file with 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>

如上引用的其他 Stack Overflow 问题中提到的,Ajax 调用会因解析错误而失败。

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


如果您使用奇怪的包装元素会发生什么? - Matti Virkkunen
如果我不使用奇怪的包装器,那么 JSON 数据会加载,但我会得到格式不正确的警告。 - Zhami
2个回答

50

有时候使用HTTP服务器不是一个选择,这可能意味着一些文件的MIME类型将不会自动提供。改编自Peter Hoffman在jQuery .getJSON Firefox 3 Syntax Error 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
});

5
值得注意的是,使用$.getJSON()在2016年仍然需要。 - A. L. Flanagan
2
@A.L.Flanagan 我不断地惊讶于这仍然被赞成。我很高兴它带来的积分,但我很遗憾它没有通过自动检测本地文件请求以某种其他方式得到解决。 - Ryan
1
谢谢,这对我有用!我在本地使用jQuery而没有服务器,它修复了我的问题。 - Salvo
1
2018年9月,只是用于$.ajax() - Pegues
1
@Pegues 很高兴能帮助到您! - Ryan
显示剩余4条评论

-7

本地文件和脚本不兼容。牵涉到太多浏览器安全问题和其他奇怪的事情。如果你想测试东西,应该通过HTTP服务器运行你的东西。在本地安装一个HTTP服务器可能是个好主意。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接