我正在使用jQuery 1.4.2创建一个ajax应用程序,我尝试使用get(),post()和ajax()方法本身。我的php服务返回:
[{"k":"label0","v":0.5},{"k":"label1","v":99.43},{"k":"label2","v":2.46},{"k":"label3","v":46.29},{"status":"OK"}]
在我的成功回调中我尝试访问json.status和json [0] [0] 但它总是返回“未定义”。我做错了什么?
function getSysinfo(source) {
var json = null;
$.ajax({
url: source,
type: 'POST',
dataType: 'json',
success: function (data) {
json = eval("(" + data + ")");
$('#data').html(json.status);
alert(json[0][0]);
refreshChart(json);
},
error: function (request, status, error) {
alert("REQUEST:\t" + request + "\nSTATUS:\t" + status +
"\nERROR:\t" + error);
}
});
return json;
}
我一直在谷歌搜索这几天。我如何访问返回的数据?任何帮助将不胜感激。
答案 0 :(得分:9)
要访问您需要的状态值:
data[4].status
这是因为它是一个存储在数组中第五个元素中的对象,status
是对象的属性。
答案 1 :(得分:8)
您的JSON数据如下所示:
[
{
"k": "label0",
"v": 0.5
},
{
"k": "label1",
"v": 99.43
},
{
"k": "label2",
"v": 2.46
},
{
"k": "label3",
"v": 46.29
},
{
"status": "OK"
}
]
您必须使用
读取您的状态json[4].status
将4
作为一个神奇的数字或length-1
- 不可取。我会考虑修改你的服务器响应更有用的东西:
{
"status": "OK",
"entries": [ ... ] // add your data here
}
答案 2 :(得分:6)
在你的成功回调试试:
var parsed = $.parseJSON(data);
$.each(parsed, function (i, jsondata) {
alert( jsondata.k );
alert( jsondata.v );
});
答案 3 :(得分:4)
您不需要eval("("+data+")");
。由于您指定了dataType:'json'
来自dataType的jQuery文档:
“json”:将响应评估为JSON并返回JavaScript对象。在jQuery 1.4中,JSON数据以严格的方式解析;任何格式错误的JSON都会被拒绝,并抛出一个解析错误。 (有关正确的JSON格式的更多信息,请参阅json.org。)
答案 4 :(得分:3)
不需要在代码下面再使用eval,这对于json来说可能更多
$.getJSON(url+query,function(json){
$.each(json,function(i,value){
});
});
答案 5 :(得分:1)
nategood已经写过你不需要对数据做任何事情,它已经是一个对象了。
在这种情况下,它是一个数组,如果你想访问状态,你需要从数据数组的最后一项(你可以在这个数组中找到它)中检索它:
data[data.length-1].status
但也许您应该考虑JSON的另一种结构,它看起来不太舒服。
类似的东西:
{
"items":[
{"k":"label0","v":0.5},
{"k":"label1","v":99.43},
{"k":"label2","v":2.46},
{"k":"label3","v":46.29}
],
"status":"OK"
}
...应该更容易处理,因为你可以简单地访问data.status,而不是先查看你在响应中找到它的位置(可能容易出错)。
答案 6 :(得分:0)
数据参数是解码的JSON,如本例所示:
答案 7 :(得分:0)
$.ajax({
url: url,
type: 'POST',
dataType: 'json',
data: formData,
showLoader:true,
success: function (response) {
var parsed = JSON.parse(JSON.stringify(response));
$.each(parsed, function (key, val) {
alert( val.name );
});
},
error: function (err) {
alert("Please enter a valid id")
}
});