0

我在 JavaScript 中有一个 JSON 响应,如下所示:

{"opt1":"2.92","opt2":"4.24","opt3":"6.36"};

这是应用console.log(data)where data 是响应的结果:

success: function(data){
            console.log("Ajax succeeded");
            console.log(data);
            console.log(data.opt1);
        },

但是,我无法访问 opt1 的值。控制台指示未定义。任何想法为什么会这样?JSON是有效的,我检查过了。

编辑

本例中的服务器使用 PHP 中的 json_encode 函数将数组转换为 JSON。我已经尝试删除最后的分号,这仍然给我一个未定义的 opt1 值。我还尝试设置 ajax 调用的 dataType,这会导致错误,表明存在意外字符。

4

4 回答 4

5

听起来data可能实际上是一个字符串,而不是一个对象。

你需要做两件事:

首先:如果该分号确实存在,那么您得到的响应不是有效的 JSON。您需要通过删除分号服务器端来解决这个问题。(但见下文。)

第二:然后,您需要确保将 JSON 字符串反序列化为对象。有几种方法可以做到这一点:

  1. Content-Type如果您的服务器使用正确的标头 ( )回复,它将自动发生application/json。这是最好的方法。

  2. 如果由于某种原因情况并非如此,并且您无法做到这一点,请添加dataType: 'json'到您的ajax通话中。

  3. 如果由于某种原因您不能这样做您可以通过手动解析 JSON 字符串$.parseJSON,例如:

    data = $.parseJSON(data);
    

    (请注意,如果浏览器有内置的,它会很高兴地使用它。如果浏览器没有parseJSON内置的,jQuery 将使用它自己的。)JSON.parse


如果由于某种原因您无法删除无效的;服务器端,您可以解决它:

  1. 添加dataType: 'text'到您的ajax通话中

  2. success

    data = $.parseJSON(data.replace(/;$/, ''));
    

    如果分号在那里,那将删除分号,然后解析结果。

于 2013-05-16T11:48:36.463 回答
0

这可能是由于您的响应作为来自服务器的字符串返回(我遇到了同样的问题)...尝试:

success: function(data){
     var json = $.parseJSON(data);
     console.log("Ajax succeeded");
     console.log(json);
     console.log(json.opt1);
},
于 2013-05-16T11:46:06.883 回答
0

使用本机调用

json = JSON.parse(data);

或者像这样将ajax的参数设置为json..

$.ajax({
  url : blahblah,
  dataType : 'json',
  .....
});

在这种情况下,您的响应会自动转换为 json

于 2013-05-16T11:47:56.600 回答
0

试试jQuery.parseJSON(obj)

jQuery.parseJSON() Takes a well-formed JSON string and returns the resulting JavaScript object.

以这种方式使用它:

var str = '{"opt1":"2.92","opt2":"4.24","opt3":"6.36"}';
var obj = jQuery.parseJSON(str);
console.log(obj.opt1);
于 2013-05-16T11:51:20.467 回答