在运行此代码时,Firefox 3中会出现语法错误(未定义的第1行test.js).警报工作正常(它显示“工作”),但我不知道为什么我收到语法错误.
jQuery代码:
$.getJSON("json/test.js",function(data) { alert(data[0].test); });
test.js:
[{"test": "work"}]
有任何想法吗?我正在为一个更大的.js文件工作,但我缩小到这个代码.什么是疯狂的,如果我用远程路径替换本地文件没有语法错误(这里是一个例子):
解决方法
我发现一个解决方案来踢这个错误
$.ajaxSetup({'beforeSend': function(xhr){ if (xhr.overrideMimeType) xhr.overrideMimeType("text/plain"); } });
现在的解释:
在firefox 3(和我只有firefox三)中,每个文件都具有MIME类型的“text / xml”被解析和语法检查.如果您使用“[”]启动JSON,则会引发语法错误,如果以“{”这是“格式错误”(我的翻译为“nicht wohlgeformt”)开头).
如果我从本地脚本访问我的json文件 – 这个进度中没有包含服务器 – 我必须重写mime类型…也许你为这个文件设置了MIME类型错误…
编辑:在jQuery 1.5.1或更高版本中,您可以使用mimeType选项来实现相同的效果.要将其设置为所有请求的默认值,请使用
$.ajaxSetup({ mimeType: "text/plain" });
您也可以直接使用$.ajax,即您的呼叫转换为
$.ajax({ url: "json/test.js",dataType: "json",mimeType: "textPlain",success: function(data){ alert(data[0].test); } });