我在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,这会导致错误,表明存在意外的字符.
听起来好像data可能是一个字符串,而不是一个对象.
你需要做的两件事:
首先:如果那个分号确实存在,那么你得到的响应是无效的JSON.您需要通过删除分号服务器端来解决此问题.(但见下文.)
第二:然后,您需要确保将JSON字符串反序列化为对象.有几种方法可以做到:
如果您的服务器使用正确的Content-Type标头(application/json)回复,它将自动发生.这是最好的方法.
如果由于某种原因不是这种情况而你无法做到这一点,请加入dataType: 'json'你的ajax电话.
如果由于某种原因,你不能做的是,你可以手动解析通过JSON字符串$.parseJSON,例如:
data = $.parseJSON(data);
Run Code Online (Sandbox Code Playgroud)
(请注意,如果浏览器没有parseJSON内置浏览器,将很乐意使用JSON.parse它.如果浏览器没有,则jQuery将自己使用.)
如果由于某种原因您无法删除无效的;服务器端,您可以解决它:
加入dataType: 'text'你的ajax电话
在success:
data = $.parseJSON(data.replace(/;$/, ''));
Run Code Online (Sandbox Code Playgroud)
这将删除分号(如果它在那里),然后解析结果.
| 归档时间: |
|
| 查看次数: |
2206 次 |
| 最近记录: |