我知道有 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/

10-12 03:15