当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《使用XMLHttpRequest加载JSON文件时,Firefox中的"格式不正确"错误》经验,为你挑选了3个好方法。

当我的页面上的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之外还有另一种加载数据的方法可以用于纯文本吗?



1> jthompson..:

您是否尝试过使用MIME类型进行JSON?

application/json

您还可以将服务器配置为自动为.json文件发送此MIME类型.


更具体一点:req.overrideMimeType("application/json"); req.send(NULL); 作品.在服务器中指定MIME类型将是更好的解决方案,但是覆盖它也可以.
在本地开发时是否有可能有这样的解决方案?

2> Kent Fredric..:

首先,真正的JSON比JavaScript更严格,要成为有效的JSON,您必须引用密钥.

 { "a": 3 } 

此外,当您使用裸XMLHttpRequest时,通常希望接收XML结果,除非MIME标头严格指定.

然而,您可以通过简单地使用jQuery之类的JavaScript框架来让自己的生活变得更轻松,这样可以为您抽象出所有这些问题并处理所有令人讨厌的边缘情况.

$.getJSON("data.json",{}, function( data ){ 
  /*  # do stuff here  */ 
});

此外,如果您同时使用严格的JSON并使用库来为您抽象,那么当浏览器开始使用本机JSON解析器时,库将能够透明地利用这些并获得显着的速度提升.

(这预计会在以后发生,当它发生时,您的用户将获得无需升级的静默升级!).


使用`$ .getJSON()`仍会为我生成错误消息.
@Kent,我很乐意使用jQuery.但是,使用jQuery的批准过程非常困难.与客户争论并证明我们需要使用jQuery所花费的时间并不值得.悲伤,但是真的.

3> Dustin Oprea..:

当Content-Type完全为空(从而绕过自然类型检测)时,也会发生这种情况.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有