我正在尝试从JsonObject访问一个值,该值通过后端的jqXHR.responseText检索,该后端是用Java编写的。
后端以Streaming Output的形式返回数据:
...
String msg = "{'msgkey':'my message to the world'}";
return JSON.defaultJSON().forValue(msg);
...
通过ajax-call访问,这里是done-callback-function:
....
$.ajax({
type: "GET",
contentType: "application/json",
url: url,
dataType: "json"
}).done(function (data, status, jqXHR) {
var resJson = jqXHR.responseText;
console.log("done jqXHR.responseText " + resJson);
var help = jQuery.parseJSON(resJson);
console.log("done help.status: " + help.status);
....
结果是:help.status undefined。
为什么呢?解析还是'错了?我想我错过了创建一个对象,但我不知道为什么它不起作用。
我尝试了一个小例子,它位于jQuery网站上,完美无缺:
var obj = jQuery.parseJSON( '{ "name": "John" }' );
alert( obj.name === "John" );
有什么想法吗?
由于
答案 0 :(得分:2)
请尝试以下操作。
首先让服务器返回正确的JSON(带双引号):
return "{\"status\":\"searched word not found\"}";
然后在客户端使用以下内容:
.done(function (data) {
console.log("data.status: " + data.status);
...
由于您指定了dataType: 'json'
,因此jquery会自动将响应文本解析为对象,这是data
函数的.done()
参数。
答案 1 :(得分:1)
将数据类型设置为 html
而不是 json
$.ajax({
type: "GET",
contentType: "application/json",
url: url,
dataType: "html"
}
修改强>
您必须了解dataType
的重要性我会继续回答您的问题“jQuery.parseJSON()无效”。
因此,可以通过“obj.key”直接访问值。
var help = jQuery.parseJSON(resJson);
console.log(“done help.status:”+ resJson.status);
继续您的代码。
var help = jQuery.parseJSON(resJson);
console.log("done help.status: " + help.status);
jQuery.parseJSON()
。按上述“obj.key”访问值。
查看演示http://jsfiddle.net/VenomVendor/Def7N/以查看差异。 确保在发送请求之前打开控制台。
答案 2 :(得分:0)
您的请求已经要求提供JSON对象:
“json”:将响应评估为JSON并返回JavaScript 宾语。 JSON数据以严格的方式解析;任何格式错误的JSON 被拒绝并抛出一个解析错误。截至jQuery 1.9,一个空的 回应也被拒绝;服务器应返回null响应 或{}代替。
没有必要进一步解析它,因为它已经是一个JSON对象。