当我的页面上的JavaScript加载包含JavaScript Object Notation格式的对象的文本文件时,我在Firefox 3.0.7的错误控制台中收到"格式不正确"的错误.如果文件只包含JSON对象,则会产生错误.如果我将对象包装在
以下是一些示例代码来说明问题.首先,名为"data.json"的"格式不正确"的文件:
{ a: 3 }
现在加载文件的一些代码:
var req = new XMLHttpRequest(); req.open("GET", "data.json"); req.send(null);
这会在Firefox错误控制台中产生以下错误:
格式不正确的文件://path/to/data.json行:1
{a:3}
- ^
如果data.json被修改为:
{ a: 3 }
没有错误.我认为它是抱怨,因为普通的JSON文件不是一个格式良好的XML文档,所以我尝试在"发送"调用之前覆盖MIME类型以强制它作为纯文本加载,但这不起作用.
var req = new XMLHttpRequest(); req.open("GET", "data.json"); req.overrideMimeType("text/plain"); req.send(null); // Still produces an error!
我将继续将我的JSON数据包装在XML文档中以解决XMLHttpRequest正在执行的任何验证,但我想知道是否有任何方法可以强制它只是不加批判地加载纯文本而不是尝试验证它.或者,除了XMLHttpRequest之外还有另一种加载数据的方法可以用于纯文本吗?
您是否尝试过使用MIME类型进行JSON?
application/json
您还可以将服务器配置为自动为.json文件发送此MIME类型.
首先,真正的JSON比JavaScript更严格,要成为有效的JSON,您必须引用密钥.
{ "a": 3 }
此外,当您使用裸XMLHttpRequest时,通常希望接收XML结果,除非MIME标头严格指定.
然而,您可以通过简单地使用jQuery之类的JavaScript框架来让自己的生活变得更轻松,这样可以为您抽象出所有这些问题并处理所有令人讨厌的边缘情况.
$.getJSON("data.json",{}, function( data ){ /* # do stuff here */ });
此外,如果您同时使用严格的JSON并使用库来为您抽象,那么当浏览器开始使用本机JSON解析器时,库将能够透明地利用这些并获得显着的速度提升.
(这预计会在以后发生,当它发生时,您的用户将获得无需升级的静默升级!).
当Content-Type完全为空(从而绕过自然类型检测)时,也会发生这种情况.