![](/img/trans.png)
[英]Jquery ajax with JSON return can't access to data inside the JSON
[英]jQuery .getJSON return JSON but can't access by result.key
我使用$.getJSON(url).done(function(data) {});
对REST服务器的调用$.getJSON(url).done(function(data) {});
返回这个
[
"{" id":1,
"medname":"Medication No. 1",
"qty":"2",
"pDay":"3",
"beforeAfterMeal":null
}", "{
"id":3,
"medname":"Medication No. 2",
"qty":"1",
"pDay":"1",
"beforeAfterMeal":null
}", "{
"id":4,
"medname":"Medication 3",
"qty":"4",
"pDay":"1",
"beforeAfterMeal":null
}
]
从Chrome中的console.log中。
通过使用$ .each(),我可以循环3次(因此它知道JSON数组中有3个条目),但是当我使用data[1].id
或data[1].medname
或任何键时,它会给出我是undefined
还是null
?
我的疑问是,返回的JSON数组正确吗? 它是从json_encode()(PHP)返回的,所以我认为它是正确的。
另外,我尝试$.parseJSON()
没有结果。
也许我在找错地方了? 指针将提供巨大帮助。
这是服务器的原始返回值(在json_encode()之后):
[
"{\"id\":1,\"medname\":\"Medication No. 1\",\"qty\":\"2\",\"pDay\":\"3\",\"beforeAfterMeal\":null}",
"{\"id\":3,\"medname\":\"Medication No. 2\",\"qty\":\"1\",\"pDay\":\"1\",\"beforeAfterMeal\":null}",
"{\"id\":4,\"medname\":\"Medication 3\",\"qty\":\"4\",\"pDay\":\"1\",\"beforeAfterMeal\":null}"
]
以上正确吗? 如果不是这样,对我来说知道哪一部分实际上是错误的对我很有用。
更新
我想我正在弄错地方。
这是服务器中发生的情况,对于每个条目,它们都使用json_encode()
进行单独编码,然后添加到数组中。 最后,再次使用json_encode()
对数组进行编码
这是数组的var_dump,在我显式调用json_encode(array);
array (size=3)
0 => string '{"id":1,"medname":"Medication No. 1","qty":"2","pDay":"3","beforeAfterMeal":null}' (length=81)
1 => string '{"id":3,"medname":"Medication No. 2","qty":"1","pDay":"1","beforeAfterMeal":null}' (length=81)
2 => string '{"id":4,"medname":"Medication 3","qty":"4","pDay":"1","beforeAfterMeal":null}' (length=77)
这是错误的地方吗? 我是否应该不首先对每个条目进行单独编码? :/
好吧,总结一下。
这里的错误是您对数组中的所有元素都运行了json_encode
,然后在整个数组中再次运行了json_encode
。 您应该只在整个阵列上运行一次。
错误的方法
$arr[] = json_encode(array('name' => 'hank'));
$arr[] = json_encode(array('name' => 'jofryhs'));
echo json_encode($arr);
结果: ["{\\"name\\":\\"hank\\"}","{\\"name\\":\\"jofryhs\\"}"]
正确的方法
$arr = array(
array('name' => 'hank'),
array('name' => 'jofryhs')
);
echo json_encode($arr);
结果: [{"name":"hank"},{"name":"jofryhs"}]
在php代码中使用:
<?php
$c = array(array("id"=>1,
"medname"=>"Medication No. 1",
"qty"=>"2",
"pDay"=>"3",
"beforeAfterMeal"=>null),
array("id"=>3,
"medname"=>"Medication No. 2",
"qty"=>"1",
"pDay"=>"1",
"beforeAfterMeal"=>null));
echo json_encode($c, JSON_FORCE_OBJECT);
?>
这是正确的json格式
[
{"id":1,
"medname":"Medication No. 1",
"qty":"2",
"pDay":"3",
"beforeAfterMeal":null
}, {
"id":3,
"medname":"Medication No. 2",
"qty":"1",
"pDay":"1",
"beforeAfterMeal":null
}, {
"id":4,
"medname":"Medication 3",
"qty":"4",
"pDay":"1",
"beforeAfterMeal":null
}
]
那么你可以使用
$.getJSON(url).done(function(data) {
alert(data[0].id);
});
jsfiddle http://jsfiddle.net/suhailvs0/v8eGg/
如果从服务器获取了字符串值,则需要对其进行解析以获取对象:
$.getJSON(url).done(function(data) {
var obj = JSON.parse(data);
var obj1 = obj[0];
// and so on
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.