我已经为此工作了一段时间,我已经阅读了大量关于SO的帖子,试图弄清楚我需要如何做到这一点,但我似乎无法让它工作。 我想这一定是我编码方式的某些方面。所以投反对票,但希望一些善良的灵魂能帮助我。
我已经使用 jsonlint 进行了测试,它返回有效。 我从服务器收到带有值的响应,除了我只是 alert(响应(之外,我似乎无法在浏览器中获得任何东西; 我需要能够分别访问"cat_id_PK"的值和其他元素,以循环访问并在 html 表格单元格中显示它们。
杰森:
{
"income": [
{
"cat_id_PK": 14,
"cat_name": "test1",
"cat_amount": "100.00"
},
{
"cat_id_PK": 15,
"cat_name": "test2",
"cat_amount": "200.00"
},
{
"cat_id_PK": 34,
"cat_name": "test3",
"cat_amount": "300.00"
},
"expense": [
{
"cat_id_PK": 14,
"cat_name": "tes41",
"cat_amount": "400.00"
},
{
"cat_id_PK": 15,
"cat_name": "test5",
"cat_amount": "500.00"
},
{
"cat_id_PK": 34,
"cat_name": "test6",
"cat_amount": "600.00"
}
]
}
.PHP
$array = array(
'income' => $income,
'expense' => $expense,
'recurring' => $recurring
);
echo json_encode($array);
简讯
var request = $.ajax({
type: "POST",
url: 'inc/functions.php',
dataType: "JSON",
data: {action: "display_categories", cur_month:cur_month}
});
request.done(function(response){
//for each element put values in <td></td> tags.
});
"我已经使用 jsonlint 进行了测试,它回来了。">
不,它没有,不是对于您显示的有错误的 JSON:它在}
之后和 "expense" : ...
之前行的逗号之前缺少结束]
。但也许这只是您问题中的一个错字,因为您正在使用json_encode()
生成 JSON(这不会产生这样的错误(。
"除了我刚刚
alert(response);
之外,我似乎无法在浏览器中获得任何东西">
所以你当时得到了某种值。
"但是如果我只是提醒
response[0]
,它将只返回 JSON 数组的第一个字符。">
是的,这是因为response
是一个字符串 - 包含 JSON 的原始字符串,您想要解析该字符串以获取对象。除了你不必手动执行此操作,因为一旦你dataType:"json"
添加到你的$.ajax()
选项,jQuery就会自动执行此操作。
"我实际上缺少这个数据类型,但即使在添加它之后,无论我尝试什么,我都会
[Object:Object]
或未定义。我实际上只不过是alert(response);
">
添加dataType:"json"
后,response
参数将是一个对象,当您尝试发出警报时,该对象将正确显示为[object Object]
。如果您使用console.log(response)
那么在浏览器的控制台中,您将看到实际对象。如果您尝试访问不存在的属性,则会undefined
。
"我需要能够分别访问
cat_id_PK
和其他元素的值,以循环访问并在 html 表格单元格中显示它们。">
你的response
对象有两个属性,income
和expenses
,两者都是对象的数组。因此,使用 response.income
访问第一个对象数组,使用 response.expenses
访问第二个对象数组。第一个收入项目是response.income[0]
,您询问的财产是response.income[0].cat_id_PK
。因此,您可以使用 for
循环,或使用 $.each()
遍历数组并对每个 .cat_id_PK
属性执行某些操作:
var request = $.ajax({
type: "POST",
url: 'inc/functions.php',
dataType: "json",
data: {action: "display_categories", cur_month:cur_month}
});
request.done(function(response){
//for each element put values in <td></td> tags.
var tr = $("<tr></tr>");
// using traditional for loop for income items
for(var i = 0; i < response.income.length; i++) {
$("<td></td>").text(response.income[i].cat_id_PK).appendTo(tr);
}
tr.appendTo("#idOfTableHere");
var tr = $("<tr></tr>");
// use equivalent jQuery $.each for expense items
$.each(response.expenses, function(i, v) {
$("<td></td>").text(v.cat_id_PK).appendTo(tr);
});
tr.appendTo("#idOfTableHere");
});
我展示的代码在每个循环中创建新的 td 元素,将它们附加到新的表行,然后在每次循环之后,新行将附加到一个表,我假设该表已经存在于您的页面上,带有 id="idOfTableHere"
.
试试这个你错过的数据类型:
var request = $.ajax({
type: "POST",
url: 'inc/functions.php',
data: {action: "display_categories", cur_month:cur_month},
dataType:"json",
});
request.done(function(response){
//for each element put values in <td></td> tags.
});