无法从JSON Array和Object获取值

时间:2015-02-04 12:07:02

标签: javascript php jquery arrays json

在我的Javascript和PHP中,我设法进行.ajax调用以获取数组。但是,当我想显示每个对象的值时,我无法显示它。

PHP:

$request =  '{"request_id":' .$requestId. ', "reqName":"' .$requestName. '", "reqSubject":' .json_encode($requestSubjects). '}';

array_push($requestArray, $request);

echo json_encode($requestArray);

使用Javascript:

$.ajax({
    type: "POST",
    url: serverURL + "getTutorRequestsProcess.php",
    data: sendTutId,
    dataType: "json",
    success: function(data){
        localStorage.setItem('pending', JSON.stringify(data));

        pending = JSON.parse(localStorage.getItem('pending'));
        console.log(pending);
    },
    error: function(jqXHR, textStatus, errorThrown){
        alert('Unable to retrieve requests.', null, 'Error','Done');
    }
});

所以当我console.log(pending)看起来像这样:

["{"request_id":13, "reqName":"Rin", "reqSubject":["English","A Math"]}", "{"request_id":14, "reqName":"Rin", "reqSubject":["English","E Math"]}"]

当我console.log(pending[0])时,我能够得到第一个对象:

{"request_id":13, "reqName":"Rin", "reqSubject":["English","A Math"]}

但是当我想要获取对象的值console.log(pending[0].request_id)时,它会返回undefined

如果有人能告诉我我的代码有什么问题,我们将非常感激。谢谢。

编辑:我正在尝试将数据添加到我的localStorage中。更新了代码以反映我正在做的事情。

更新了Javascript:

$.ajax({
    type: "POST",
    url: serverURL + "getTutorRequestsProcess.php",
    data: sendTutId,
    dataType: "json",
    success: function(data){
        localStorage.setItem('pending', JSON.stringify(data));

        pending = JSON.parse(localStorage.getItem('pending'));
        console.log(pending[0]);

        var response = jQuery.parseJSON(pending[i]);
        console.log(response.request_id);
    },
    error: function(jqXHR, textStatus, errorThrown){
        alert('Unable to retrieve requests.', null, 'Error','Done');
    }
})

OVM和Codeseeker的答案都有效并解决了我的问题。令人遗憾的是,我无法将两者都标记为正确,因为它们都提供了两种不同但有效的解决方案。

2 个答案:

答案 0 :(得分:1)

问题是,您使用json_encode序列化字符串,而不是真正的PHP类和属性。

生成的json是一个字符串数组,而不是一个对象数组:

["{"request_id":13, "reqName":"Rin", "reqSubject":["English","A Math"]}", "{"request_id":14, "reqName":"Rin", "reqSubject":["English","E Math"]}"]

你想要一个像这样的结果

[{"request_id":13, "reqName":"Rin", "reqSubject":["English","A Math"]}, {"request_id":14, "reqName":"Rin", "reqSubject":["English","E Math"]}]

要实现这一点,请尝试使用这些属性构建标准PHP对象并对其进行序列化。不要序列化包含json的字符串。

所以在服务器端,用这个替换你的第一行代码,你就可以了:

$request = (object)['request_id': $requestId, 'reqName': $requestName, 'reqSubject': ['English', 'A Math']];

答案 1 :(得分:0)

.用于访问对象属性,而[]表示法用于访问数组值。

console.log(data[0]['request_id']);

<强> Demo

更新

尝试 -

var response = jQuery.parseJSON(data0)
console.log(response.request_id);