jQuery.parseJSON()没有对象/不工作

时间:2013-12-30 00:50:40

标签: jquery ajax json

我正在尝试从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" );

有什么想法吗?

由于

3 个答案:

答案 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()无效”

  • 由于您已设置dataType:“json”,因此您正在键入以解析json对象。
  • jQuery.parseJSON() accepts string ONLY
  • 您无法再次解析JSON。
  • 因此,可以通过“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()
  • 解析json
  • 将数据类型设置为“html”或“text”
  • 现在使用jQuery.parseJSON()
  • 按上述“obj.key”访问值。

      

    查看演示http://jsfiddle.net/VenomVendor/Def7N/以查看差异。   确保在发送请求之前打开控制台。

答案 2 :(得分:0)

您的请求已经要求提供JSON对象:

  

“json”:将响应评估为JSON并返回JavaScript   宾语。 JSON数据以严格的方式解析;任何格式错误的JSON   被拒绝并抛出一个解析错误。截至jQuery 1.9,一个空的   回应也被拒绝;服务器应返回null响应   或{}代替。

自: jQuery.ajax()

没有必要进一步解析它,因为它已经是一个JSON对象。