我在JavaScript中有一个JSON响应,如下所示:
{"opt1":"2.92","opt2":"4.24","opt3":"6.36"};
这是应用console.log(data)
的结果,其中数据是响应:
success: function(data){
console.log("Ajax succeeded");
console.log(data);
console.log(data.opt1);
},
但是,我无法访问opt1的值。控制台显示未定义。任何想法为什么会这样? JSON有效,我查了一下。
修改
在这种情况下,服务器使用PHP中的json_encode函数将数组转换为JSON。我试过在最后删除分号,这仍然给我一个未定义的值为opt1。我也尝试设置ajax调用的dataType,这会导致错误,表明存在意外的字符。
答案 0 :(得分:5)
听起来data
实际上可能是字符串,而不是对象。
您需要做的两件事:
首先:如果该分号确实存在,那么您获得的响应不是有效的JSON。您需要通过删除分号服务器端来解决此问题。 (但见下文。)
第二次:然后,您需要确保将JSON字符串反序列化到对象中。有几种方法可以做到:
如果您的服务器使用正确的Content-Type
标题(application/json
)回复,则会自动执行此操作。这是最好的方式。
如果出于某种原因并非如此,请将dataType: 'json'
添加到ajax
来电。
如果由于某种原因您不能那,您可以通过$.parseJSON
手动解析JSON字符串,例如:
data = $.parseJSON(data);
(请注意parseJSON
将很乐意使用浏览器的内置JSON.parse
(如果有)。如果浏览器没有,则jQuery将使用自己的。)
如果由于某种原因你无法删除无效的;
服务器端,你可以解决它:
将dataType: 'text'
添加到您的ajax
来电
在success
:
data = $.parseJSON(data.replace(/;$/, ''));
如果它在那里会删除分号,然后解析结果。
答案 1 :(得分:0)
这可能是由于你的回复是从服务器返回的字符串(我有同样的问题)...尝试:
success: function(data){
var json = $.parseJSON(data);
console.log("Ajax succeeded");
console.log(json);
console.log(json.opt1);
},
答案 2 :(得分:0)
使用原生呼叫
json = JSON.parse(data);
或将 ajax 的参数设为json,就像这样..
$.ajax({
url : blahblah,
dataType : 'json',
.....
});
在这种情况下,您的回复会自动转换为json
答案 3 :(得分:0)
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);