Ajax 无法访问JSON响应属性
我在JavaScript中有一个JSON响应,如下所示:Ajax 无法访问JSON响应属性,ajax,json,jquery,Ajax,Json,Jquery,我在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":"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调用的数据类型,这会导致一个错误,表明存在意外字符。这可能是由于您的响应以字符串形式从服务器返回(我也遇到了同样的问题)。。。尝试:
这可能是由于您的响应以字符串形式从服务器返回(我也遇到了同样的问题)。。。尝试: 使用本机呼叫
json = JSON.parse(data);
或者将ajax的参数设置为json,如下所示
$.ajax({
url : blahblah,
dataType : 'json',
.....
});
在这种情况下,您的响应会自动转换为json,使用本机调用
json = JSON.parse(data);
或者将ajax的参数设置为json,如下所示
$.ajax({
url : blahblah,
dataType : 'json',
.....
});
在这种情况下,您的响应会自动转换为json,听起来好像数据实际上可能是字符串,而不是对象 你需要做两件事: 首先:如果分号确实在那里,那么您得到的响应不是有效的JSON。您需要通过删除服务器端的分号来修复此问题。(但请参见下文。) Second:然后,您需要确保JSON字符串被反序列化为对象。有几种方法可以做到这一点:
内容类型
标题(application/json
)进行回复,则会自动执行此操作。这是最好的办法ajax
调用中添加dataType:'json'
parseJSON
很乐意使用浏览器内置的JSON.parse
(如果浏览器没有),jQuery将使用自己的。)如果由于某种原因无法删除无效的
代码>服务器端,您可以解决此问题:
向ajax
调用添加dataType:'text'
在成功中
:
data = $.parseJSON(data.replace(/;$/, ''));
这将删除分号(如果有),然后解析结果
听起来好像数据实际上可能是一个字符串,而不是一个对象
你需要做两件事:
首先:如果分号确实在那里,那么您得到的响应不是有效的JSON。您需要通过删除服务器端的分号来修复此问题。(但请参见下文。)
Second:然后,您需要确保JSON字符串被反序列化为对象。有几种方法可以做到这一点:
如果服务器使用正确的内容类型
标题(application/json
)进行回复,则会自动执行此操作。这是最好的办法
如果由于某种原因,情况并非如此,而您无法做到这一点,请在ajax
调用中添加dataType:'json'
如果由于某种原因您不能这样做,您可以通过手动解析JSON字符串,例如:
(请注意,parseJSON
很乐意使用浏览器内置的JSON.parse
(如果浏览器没有),jQuery将使用自己的。)
如果由于某种原因无法删除无效的代码>服务器端,您可以解决此问题:
向ajax
调用添加dataType:'text'
在成功中
:
data = $.parseJSON(data.replace(/;$/, ''));
这将删除分号(如果有),然后解析结果
试试看
以这种方式使用它:
var str = '{"opt1":"2.92","opt2":"4.24","opt3":"6.36"}';
var obj = jQuery.parseJSON(str);
console.log(obj.opt1);
试试看
以这种方式使用它:
var str = '{"opt1":"2.92","opt2":"4.24","opt3":"6.36"}';
var obj = jQuery.parseJSON(str);
console.log(obj.opt1);
它的结尾真的有分号吗?这不是有效的JSON。您确定console.log(data)
没有将JSON字符串记录为字符串吗?如果您没有明确告诉jQuery您期望的是JSON,它会尝试猜测响应的格式,我猜因为您的字符串不是有效的JSON,所以它不会为您解析它,因此您无法访问属性。显示更多代码——您是否在AJAX调用中指定了数据类型:“JSON”
,或者服务器正在发送内容类型:application/json
?@PankajGarg:1。你所指的答案与OP概述的问题无关。2.因此,唠叨OP看你的答案是不酷的。当你发布你的答案时,OP收到了通知。这就足够了。发表评论(更不用说不必要的粗体评论)既不恰当也不有用。它的结尾真的有分号吗?这不是有效的JSON。您确定console.log(data)
没有将JSON字符串记录为字符串吗?如果您没有明确告诉jQuery您期望的是JSON,它会尝试猜测响应的格式,我猜因为您的字符串不是有效的JSON,所以它不会为您解析它,因此您无法访问属性。显示更多代码——您是否在AJAX调用中指定了数据类型:“JSON”
,或者服务器正在发送内容类型:application/json
?@PankajGarg:1。你所指的答案与OP概述的问题无关。2.因此,唠叨OP看你的答案是不酷的。当你发布你的答案时,OP收到了通知。这就足够了。发布评论(更不用说不必要的粗体)既不合适也不有用。您需要$.parseJSON(data)
,而不是data.toJSON()
。更改为parseJSON。。。我是从那里得到的,但我意识到