从假定的空json响应中获取parsererror

时间:2013-12-14 21:45:21

标签: php jquery ajax arrays json

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 +
'">&#36;' + 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 + '">&#36;' + 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 + '">&#36;' + 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
    }
]
}

1 个答案:

答案 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');

  }

}
});

尝试这样,只是为了测试然后使用数据