【发布时间】:2025-12-04 14:30:01
【问题描述】:
我遇到了一个非常奇怪的问题。我的 JSON.parse 似乎不起作用。我也尝试过使用 eval 但这也无济于事。以下是我的代码:
var responseDoc = xmlHttp.responseText;
document.getElementById("debug1").innerHTML=responseDoc;
var response = JSON.parse(responseDoc);
document.getElementById("debug2").innerHTML=response.category;
我的 responseDoc 看起来像这样
{"id":null,"category":"dog","price":"4321","name":"new product 123","sku":"1234","success":true}
但是 response.category 是 "undefined"。任何想法为什么会发生这种情况?我已经花了几个小时,但无法弄清楚。非常感谢!
*更新*:
按照某些人的建议删除了 stringify -> 仍然无法正常工作。
如果我尝试下面的代码,我会从控制台收到“Uncaught SyntaxError: Unexpected token
var response = JSON.parse(xmlHttp.responseText);
*更新 2 *:
发现问题。这是因为我的 responseDoc 正在获取 HTML Doc。不是 JSON 对象。不知道为什么会这样。这是我处理ajax请求的代码(我正在使用jsp):
JSONObject result = new JSONObject();
result.put("success",true);
result.put("id",request.getParameter("id"));
result.put("name", request.getParameter("name"));
result.put("sku",request.getParameter("sku"));
result.put("price",request.getParameter("price"));
result.put("category",request.getParameter("category"));
out.print(result);
out.flush();
【问题讨论】:
-
我觉得不错! jsfiddle.net/nikhilpatil/m5Kdq 任何特定的浏览器?
-
@NikhilPatil:该问题特定于通过 XMLHttpRequest 获取数据(其中响应是字符串,而不是对象) - 将值作为文字转储的代码不太可能是一个很好的并行。
-
@cloudfeet 你可能是对的。原因除了明显不需要的字符串化之外,其余代码都是有效的(应该可以工作)所以罪魁祸首必须是正在获取的数据(或获取数据的方式)
-
Dao Lam:由于您使用的是 Chrome,因此您应该对代码进行断点并检查值。当你这样做时,你会看到
responseDoc的值是一个字符串,而不是一个对象。 -
道林:你应该也能看到
response的值也是一个字符串,而不是一个对象——这是因为JSON.stringify()的使用适得其反。取出字符串化,然后告诉我们您看到的response的值。