我知道有 100 万零 1 个问题,但我似乎找不到答案。
我正在通过 PHP 接收数据
echo json_encode($result);
来自典型的 MYSQL 查询。
我在控制台中得到这样的结果。
[{"id" : "1", "name" : "bob"}]
我正在尝试使用 $.each 来迭代这个,这样我就可以处理我的结果,但我只会得到错误、未定义或 0[object Object] .. 之类的东西。
我的目标是将每个值附加到输入框(从表中检索数据以放入编辑框)。
$.post('getstuff.php', { id : id } function(data){
$.each(data), function(k,v){
$('input[name= k ]').val(v);
});
});
正如您所看到的,我希望它像键=> 值对一样简单,但显然不是。我试过解析,字符串化..在这一点上我真的迷路了。我也不能告诉 $.post 我正在使用 JSON,因为我使用的是一个更随意的函数,但我只是将它作为我的例子发布。
编辑
var retrievedData = JSON.parse(data);
$.each(retrievedData, function(k,v){
for (var property in retrievedData) {
if (retrievedData.hasOwnProperty(property)) {
console.log(k);
console.log(v);
console.log(property);
//$('input[name= k ]').val(v);
}
}
});
最佳答案
在您的第二个代码示例中,retrievedData
是一个数组,您可以使用 jQuery $each...
$.each(retrievedData, function(k, v) {
到此为止。但是随后您尝试像对象一样再次迭代
retrievedData
,但事实并非如此。这就是您在控制台中收到未定义消息的原因for (var property in retrievedData) {
if (retrievedData.hasOwnProperty(property)) {
console.log(k);
console.log(v);
console.log(property);
//$('input[name= k ]').val(v);
}
}
在内部循环中,您应该迭代
v
而不是 retrievedData
。在 $each v
的每次传递中都会是一个对象。试试这个:$.each(retrievedData, function(k,v){
for (var key in v) {
if (v.hasOwnProperty(key)) {
console.log("key: " + key);
console.log("value: " + v[key]);
}
}
});
你应该先做一些类型检查 v 是一个对象并捕获任何错误。
关于javascript - 将 JSON 解析为可用的东西,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24473817/