在我的Javascript和PHP中,我已经设法执行了一个.ajax调用来获得一个数组。然而,当我想显示每个对象的值时,我无法做到这一点
PHP:
$request = '{"request_id":' .$requestId. ', "reqName":"' .$requestName. '", "reqSubject":' .json_encode($requestSubjects). '}';
array_push($requestArray, $request);
echo json_encode($requestArray);
所以当我console.log(data)
时,它看起来像这样:
["{"request_id":13, "reqName":"Rin", "reqSubject":["English","A Math"]}", "{"request_id":14, "reqName":"Rin", "reqSubject":["English","E Math"]}"]
当我console.log(data[0])
时,我可以得到第一个对象:
{"request_id":13, "reqName":"Rin", "reqSubject":["English","A Math"]}
然而,当我想获得对象的值时,比如console.log(data[0].request_id)
,它会返回一个undefined
。
如果有人能告诉我我的代码出了什么问题,我将不胜感激。非常感谢。
["{"request_id":13,
请注意[后面的"。这不是javascript控制台中包含对象的数组的输出格式,而是包含字符串的数组。
这是因为
$request = '{"request_id":' .$requestId. ', "reqName":"' .$requestName. '", "reqSubject":' .json_encode($requestSubjects). '}';
在php脚本中。您在这里构建的不是hashmap/对象,而是一个字符串。它是由json_encode这样编码的。
试试
$request = array(
"request_id" => $requestId,
"reqName" => $requestName,
"reqSubject" => $requestSubjects,
)
array_push($requestArray, $request);
echo json_encode($requestArray);
您可以使用JSON.stringify()
将对象转换为字符串。
试试
$request = {"request_id":"aaaa", "reqName":"bbbb", "reqSubject":"ccc"};
alert(JSON.stringify($request.request_id));
您得到的响应是json
格式的。你必须先解析它。尝试使用-
var response = jQuery.parseJSON(data[0]); //parse json data
console.log(response.request_id);
在你的帖子中,你提到
"但是,当我想像这样获得对象的值时,
console.log(data[0].request_id),它返回一个未定义的。"
要将结果视为对象,应使用JSON.parse()方法将其解析为JSON对象
否则,您可以将其用作阵列
data[0]["request_id"]