无法访问JSON响应属性

dan*_*nde 0 ajax jquery json

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

{"opt1":"2.92","opt2":"4.24","opt3":"6.36"};
Run Code Online (Sandbox Code Playgroud)

这是应用console.log(data)数据作为响应的结果:

success: function(data){
            console.log("Ajax succeeded");
            console.log(data);
            console.log(data.opt1);
        },
Run Code Online (Sandbox Code Playgroud)

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

编辑

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

T.J*_*der 5

听起来好像data可能是一个字符串,而不是一个对象.

你需要做的两件事:

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

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

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

  2. 如果由于某种原因不是这种情况而你无法做到这一点,请加入dataType: 'json'你的ajax电话.

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

    data = $.parseJSON(data);
    
    Run Code Online (Sandbox Code Playgroud)

    (请注意,如果浏览器没有parseJSON内置浏览器,将很乐意使用JSON.parse它.如果浏览器没有,则jQuery将自己使用.)


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

  1. 加入dataType: 'text'你的ajax电话

  2. success:

    data = $.parseJSON(data.replace(/;$/, ''));
    
    Run Code Online (Sandbox Code Playgroud)

    这将删除分号(如果它在那里),然后解析结果.