很抱歉第n个版本的对象抓取,但我只是没有看到它。
我正在从数据库返回一个JSON对象到我的Javascript,我在控制台中看到返回的对象(如下)。但是当我试图让孩子进入控制台时,我得到了"undefined"
。我应该能够看到result.bills
或result["bills"]
并确保我已经尝试了result[0].bills
等等,所有这些都是未定义的。这看起来很基本,但我不明白为什么我不能做这项工作。
我的PHP(在db之后):
if ($result) {
$rows = array();
while($r = mysqli_fetch_assoc($result)) {
$rows[bills] = $r;
}
echo json_encode($rows);
} else {
echo "Unknown Error";
}
//all done
我的AJAX:
$.ajax({
type: 'get',
url: 'GetBills.php',
success: function(result) {
var thebills = result.bills;
console.log(thebills);
},
error: function(xhr, desc, err) {
console.log(xhr);
console.log("Details: " + desc + "\nError:" + err);
}
});
我回来了:
{
"bills": {
"ID": "3",
"State": "MD",
"Title": "Maryland Android Project Act (S.1196 H.2057)",
"HouseNum": "H 2057",
"SenateNum": "",
"Session": "189th"
}
}
答案 0 :(得分:5)
你得到undefined
因为jQuery不知道它实际上正在接收JSON。如果您使用php文件发送JSON 标题,或者将dataType
设置为'json',则会检测到自动解析。
所以,目前你正在访问一个字符串:
var result = '{"bills":{"ID":"3","State":"MD","Title":"Maryland Android Project Act (S.1196 H.2057)","HouseNum":"H 2057","SenateNum":"","Session":"189th"}}'
但您正在尝试访问STRING函数(特别是bills
,undefined
)。
如果您选择不更改dataType
或添加标题,您也可以执行result = JSON.parse(result)
,这也会给您带来同样的效果。
执行上述三个解决方案之一将为您提供您正在寻找的对象,并访问其子女:
//Javascript
result = JSON.parse(result);
//In Console
Object {bills: Object}
bills:
ObjectHouseNum: "H 2057"
ID: "3"
SenateNum: ""
Session: "189th"
State: "MD"
Title: "Maryland Android Project Act (S.1196 H.2057)"
__proto__: Object
__proto__: Object
答案 1 :(得分:3)
将dataType添加到您的ajax请求对象: ...
type: 'get',
url: 'GetBills.php',
dataType: 'json',
...
答案 2 :(得分:1)
您可以在AJAX调用中强制内容类型为JSON,甚至更好,在PHP中设置正确的内容类型,让jQuery自动检测它。想象一下从不同于jQuery的其他工具访问您的数据,例如移动应用程序或一些REST工具。如果您正确设置了内容类型,大多数工具/语言都会自动检测它,您不必一次又一次地手动解析它。
// Set the content type correctly
header('Content-Type: application/json');
if ($result) {
$rows = array();
while ($r = mysqli_fetch_assoc($result))
{
$rows[] = $r; // Notice how to append the row to the array
}
http_response_code(200); // PHP >= 5.4
echo json_encode([
'success' => true,
'bills' => $rows
]);
}
else {
http_response_code(500); // Your status code here
echo json_encode([
'success' => false,
'message' => 'Something went wrong',
]);
}
你的JavaScript:
$.ajax({
type: 'get',
url: 'GetBills.php',
success: function(result) {
var thebills = result.bills;
console.log(thebills);
},
error: function(response) {
console.log('Error', response.message);
}
});