我正在使用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警告?
答案 0 :(得分:46)
有时使用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
});
答案 1 :(得分:-5)
本地文件和脚本不混合。 方式涉及太多浏览器安全性和其他奇怪之处。如果你想测试一下,你应该通过HTTP服务器运行你的东西。在本地安装一个可能是个好主意。