更新:请参阅Anthony Grist对您的问题的评论,我错过了您的JSON无效的事实。由于他没有发布答案,我会选择它。
你JSON是无效的,因为你返回两个单独的阵列,这一个:
[{"v":"233","pv":"1.83","avd":"00:01:58","nv":"82.83%","br":"75.11%"},
{"v":"17","pv":"3.65","avd":"00:08:31","nv":"70.59%","br":"58.82%"},
{"v":"9","pv":"2.22","avd":"00:01:51","nv":"0.00%","br":"44.44%"}]
这一个:
[{"date":"2013-02-01","visits":63},
{"date":"2013-02-02","visits":30}]
你不能这样做,因为顶层一个JSON文件必须是一个东西(一个对象或一个数组)。
您可以用属性返回的对象为每个阵列:
{
"vdata":
[{"v":"233","pv":"1.83","avd":"00:01:58","nv":"82.83%","br":"75.11%"},
{"v":"17","pv":"3.65","avd":"00:08:31","nv":"70.59%","br":"58.82%"},
{"v":"9","pv":"2.22","avd":"00:01:51","nv":"0.00%","br":"44.44%"}
],
"datedata":
[{"date":"2013-02-01","visits":63},
{"date":"2013-02-02","visits":30}
]
}
分析(见下文)后,就可以访问这些数据是这样的:
console.log(data.vdata[0].v); // "233"
console.log(data.datedata[0].date); // "2013-02-01"
或被两个插槽的数组,每个插槽中都有一个阵列:
[
[{"v":"233","pv":"1.83","avd":"00:01:58","nv":"82.83%","br":"75.11%"},
{"v":"17","pv":"3.65","avd":"00:08:31","nv":"70.59%","br":"58.82%"},
{"v":"9","pv":"2.22","avd":"00:01:51","nv":"0.00%","br":"44.44%"}
],
[{"date":"2013-02-01","visits":63},
{"date":"2013-02-02","visits":30}
]
]
解析后(见下文),您可以访问这些数据是这样的:
console.log(data[0][0].v); // "233"
console.log(data[1][0].date); // "2013-02-01"
就个人而言,我更喜欢使用对象,因为那显然我访问哪个阵列。
原来的答复:
jQuery将解析JSON到你的一个对象,并传递到success
功能,然后你就可以访问就像任何其他对象。在你的情况下,顶层是一个数组。所以:
$.ajax({
url: url,
type: 'POST',
dataType:"json",
async: false,
success: function(data) {
// Use the line from above that suits the way
// you updated your JSON structure
}
});
旁注:async: false
已取消,将在某个时候被移除。做同步ajax请求通常不是一个好主意,它往往会在请求期间锁定浏览器的用户界面。相反,只需构造代码以在触发回调时继续处理。
JSON表示单个对象或数组,所以不能返回两个完全独立的阵列。当你将它解析为存储在一个变量中的实际对象/数组时,它将如何工作?一个变量不能指向两个单独的东西。 – 2013-02-22 09:59:42
@AnthonyGrist是对的。你的json字符串无效。检查http://jsonlint.com/ – Kris 2013-02-22 10:12:21
@Kris谢谢你的链接,我想我需要重建我的json字符串。 – Darth 2013-02-22 10:14:03