ReactJS 返回解析器错误语法错误:在 AJAX 调用 JAVA servlet 后出现意外的标记 a

ReactJS returns parsererror SyntaxError: Unexpected token a after AJAX call to JAVA servlet

本文关键字:错误 servlet 意外 JAVA 调用 返回 语法 AJAX ReactJS      更新时间:2023-09-26

我正在尝试完成ReactJS教程,但出现此错误"解析器错误语法错误:意外的令牌a"。

有带有get和post方法的java servlet,我用下一个json发送响应:

"[{"author": "Pete Hunt", "text": "This is one comment"}, {"author": "Jordan Walke", "text": "This is another comment"}]"

我也试过这个 {"作者": "皮特·亨特", "文本": "这是一条评论"}, {"作者": "乔丹·沃克", "文本": "这是另一条评论"}

我看不出哪里有问题。对我来说,看起来我在 ReactJS 中错过了一些东西

UPD 我的 servlet 响应代码。我正在使用 gson 库。

response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
ModelObject obj = new ModelObject();
obj.setAuthor("Pete Hunt");
obj.setText("This is one comment");
ModelObject obj2 = new ModelObject();
obj2.setAuthor("Jordan Walke");
obj2.setText("This is *another* comment");
List<ModelObject> objList = new ArrayList<ModelObject>();
objList.add(obj);
objList.add(obj2);
Gson gson = new Gson();
PrintWriter out = response.getWriter();
out.write(gson.toJson(objList));
out.close();
out.flush()

当您尝试解析用冗余双引号括起来的字符串时,如下所示:

JSON.parse('"[{"author": "Pete Hunt", "text": "This is one comment"}]"');

而不是:

JSON.parse(' [{"author": "Pete Hunt", "text": "This is one comment"}] ');

然后你会得到SyntaxError: Unexpected token a,因为它尝试将"[{"解析为字符串,并且不希望接下来a获取字符。

您必须显示打印 JSON 字符串的确切命令,但您肯定会在某处获得额外的双引号,如果您将"author"更改为"X" Unexpected token a,这将变得Unexpected token X

您可能正在做的(尽管这只是我的猜测,因为您没有显示任何实际代码)是手动构建 JSON 字符串,这绝不是一个好主意。你应该使用像Google Gson或json-io这样的库来为你做这件事。

另请参阅:Java JSON 序列化 - 最佳实践问题。