我在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类型。我的已经准确了,所以它必须是别的东西。
答案 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");