有效的JSON上的Firefox JSON“格式不正确”错误

时间:2010-10-21 10:51:11

标签: javascript json

我在Firefox中收到以下错误消息:

Error: not well-formed
Source File: http://school/courses.booking.add.php?1287657494723
Line: 1, Column: 1
Source Code:
{"type":"error","message":"You have already booked this course."}

如您所见,输出是有效的JSON(它由PHP的json_encode()函数创建)。并且它使用application/json MIME类型。我认为错误可能与解析有关:

eval: function(json) {
    return eval('(' + json + ')');
}

但即使我不解析字符串,只是提醒返回的JSON响应,错误仍会显示。

相关问题:"not well-formed" error in Firefox when loading JSON file with XMLHttpRequest。他的解决方案是修复MIME类型。我的已经准确了,所以它必须是别的东西。

3 个答案:

答案 0 :(得分:3)

似乎Web Developer Toolbar中的javascript调试器只是希望所有Ajax响应都是XML,而不管MIME类型如何。其他任何东西都会产生“形式不好”的错误。

答案 1 :(得分:0)

我在以前版本的FireFox + FireBug中遇到此问题,其中在JSON格式化内容之前/之后存在换行符。确保在服务器端输出JSON响应之前清除输出流。

JSP示例:

out.clear(); out.println(json);

答案 2 :(得分:0)

我使用OpenJS的jxs遇到了同样的问题。在这种情况下,导致错误的原因是load属性中的这个条件(版本3.01.A中的第33行):

//XML Format need this for some Mozilla Browsers
if (http.overrideMimeType) http.overrideMimeType('text/xml');

它使浏览器始终期望XML。这很容易解决:

// XML Format needs this for some Mozilla Browsers
if (format.charAt(0) === "x" && http.overrideMimeType) http.overrideMimeType("text/xml");

由于它现在对format进行了比较,因此代码也应该更改其位置,并且应该放在

之后
format = format.toLowerCase();

目前在第38行。因此,代码来自:

32 //XML Format need this for some Mozilla Browsers
33 if (http.overrideMimeType) http.overrideMimeType('text/xml');
34
35 if(!method) method = "GET";//Default method is GET
36 if(!format) format = "text";//Default return type is 'text'
37 if(!opt) opt = {};
38 format = format.toLowerCase();
39 method = method.toUpperCase();

要:

32 if(!method) method = "GET";//Default method is GET
33 if(!format) format = "text";//Default return type is 'text'
34 if(!opt) opt = {};
35 format = format.toLowerCase();
36 method = method.toUpperCase();
37
38 //XML Format need this for some Mozilla Browsers
39 if (format.charAt(0) === "x" && http.overrideMimeType) http.overrideMimeType("text/xml");