EL问题
我的JSON返回一个关联数组,我从页面中获取元素并显示它们。有时一个或多个子数组将为空,这是预期的行为。对于那些我想要的东西没有显示在页面上。我的问题是,目前任何一个子数组都是空的,我得到一个" parsererror"。在我的应用程序中,您可以在几个月之间切换,当下拉选项更改为其他月份时,将进行此AJAX调用。在所有子数组都有值的月份,我没有收到错误。我只在一个或多个子数组为空时才得到它。
PHP
首先我执行SQL查询,我将其遗漏以尽可能缩短,但这些是3个结果数组:
$income = $results->fetchall(PDO::FETCH_ASSOC);
$expense = $results->fetchall(PDO::FETCH_ASSOC);
$recurring = $results->fetchall(PDO::FETCH_ASSOC);
然后我想将它们分配给一个数组,然后我将json_encode:
$array = array(
'income' => $income,
'expense' => $expense,
'recurring' => $recurring
);
echo json_encode($array);
AJAX
这基本上是调用以前的php代码,然后在表格中显示数据库中的每条记录。
var request = $.ajax({
type: "POST",
url: 'inc/functions.php',
dataType: "JSON",
data: {action: "display_categories", cur_month:cur_month}
});
request.done(function(response){
$('#income tbody tr, #expense tbody tr').remove();
for(var i = 0; i < response.income.length; i++) {
$('<tr><td id="' + response.income[i].cat_id_PK + '">' + response.income[i].cat_name + '</td><td id="' + response.income[i].cat_id_PK +
'">$' + response.income[i].cat_amount + '</td></tr>').appendTo("#income");
}
for(var i = 0; i < response.expense.length; i++) {
$('<tr><td id="' + response.expense[i].cat_id_PK + '">' + response.expense[i].cat_name + '</td><td id="' + response.expense[i].cat_id_PK + '">$' + response.expense[i].cat_amount + '</td></tr>').appendTo("#expense");
}
for(var i = 0; i < response.recurring.length; i++) {
$('<tr><td id="' + response.recurring[i].cat_id_PK + '">' + response.recurring[i].cat_name + '</td><td id="' + response.recurring[i].cat_id_PK + '">$' + response.recurring[i].cat_amount + '</td></tr>').appendTo("#expense");
}
});
request.fail(function(jqxhr, textStatus){
alert("Request failed: " + textStatus);
});
};
JSON
这是一个带有两个空子阵列的JSON响应示例。
{
"income": [],
"expense": [],
"recurring": [
{
"cat_id_PK": 67,
"cat_name": "Grooming",
"cat_amount": "40.00",
"recur_begin": 1,
"recur_end": 12
}
]
}
答案 0 :(得分:0)
计算从sql查询结果中获得的行数。 如果它们大于0,则发送一个额外的字段
$d['status'] ='OK';
如果不存在记录,则将错误处理发送为
$d['status'] ='ERR';
因此请检查数据成功中的状态字段
dataType: 'json',
data: you data,
success: function( data ) {
if(data.status == "OK"){
alert('success');
} else{
alert('failure');
}
}
});
尝试这样,只是为了测试然后使用数据