如何在$ .ajax方法的success属性中访问对象的元素?

时间:2017-12-21 18:53:42

标签: javascript php jquery ajax

function getReportedInfo(id) {
    $.ajax({
        url: 'includes/get_data.php',
        type: 'POST',
        data: {id:id},
        dataType: 'json',
        success: function(data) {
            console.log(data);
        }
    });
};

从get_data.php脚本返回的JSON对象是:

{
    id: 5, 
    username: "Anthony", 
    status: "accupied"
}

如果我执行console.log(data.length),我能够获得数据对象的长度。但是,当我在success属性中的console.log(data)时,我可以看到该对象。 如果我执行console.log(data.username),我无法访问数据obejct的元素,这在控制台中显示为undefined。 我在函数getReportedInfo的范围之外创建了一个变量data1,并将通过success属性检索的数据分配给 在我尝试在函数外部显示data1的内容之后,这个变量。

2 个答案:

答案 0 :(得分:1)

听起来data是字符串而不是对象。您可以使用JSON.parse将其转换为对象。请尝试以下代码。

function getReportedInfo(id) {
    $.ajax({
        url: 'includes/get_data.php',
        type: 'POST',
        data: {id:id},
        dataType: 'json',
        success: function(data) {
            var dataObject = JSON.parse(data);
            console.log(dataObject.username);
        }
    });
};

修改

在下面的评论中与OP讨论后,确定返回的对象data位于如下结构中,并且已经是对象形式(不是字符串)

{
    "0": {
        id: 5, 
        username: "Anthony", 
        status: "accupied"
    }
}

因此,以下代码应该有效。

function getReportedInfo(id) {
    $.ajax({
        url: 'includes/get_data.php',
        type: 'POST',
        data: {id:id},
        dataType: 'json',
        success: function(data) {
            console.log(data["0"].username);
        }
    });
};

答案 1 :(得分:-2)

如果在php中你这样返回

<?php

echo json_encode($array);
// or 
return json_encode($array);

在JavaScript中,您可以在尝试使用时使用它,现在,显然即使您在请求中指示它,也不会返回JSON,在这种情况下它使用解析:

function getReportedInfo(id) {
    $.ajax({
        url: 'includes/get_data.php',
        type: 'POST',
        data: { id:id },
        success: function(data) {
            var response = JSON.parse(data);
            console.log(response.id); // return 5
        }
    });
};