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

Php 从假定的空json响应获取parsererror,php,jquery,ajax,arrays,json,Php,Jquery,Ajax,Arrays,Json,EL PROBLEMO 我的JSON返回一个关联数组,我从中获取元素并显示在页面上。有时一个或多个子数组将为空,这是预期的行为。对于那些我不希望在页面上显示任何内容的人。我的问题是,当前只要这些子数组中的一个子数组为空,我就会得到一个“parserror”。在我的应用程序中,您可以在月份之间切换,当下拉选择更改为其他月份时,就会进行此AJAX调用。在所有子数组都有值的月份,我不会得到错误。我只在一个或多个子数组为空时得到它 PHP 首先,我执行SQL查询,为了尽可能简短,我省略了SQL查询,但结

EL PROBLEMO

我的JSON返回一个关联数组,我从中获取元素并显示在页面上。有时一个或多个子数组将为空,这是预期的行为。对于那些我不希望在页面上显示任何内容的人。我的问题是,当前只要这些子数组中的一个子数组为空,我就会得到一个“parserror”。在我的应用程序中,您可以在月份之间切换,当下拉选择更改为其他月份时,就会进行此AJAX调用。在所有子数组都有值的月份,我不会得到错误。我只在一个或多个子数组为空时得到它

PHP

首先,我执行SQL查询,为了尽可能简短,我省略了SQL查询,但结果是3个数组:

$income = $results->fetchall(PDO::FETCH_ASSOC);
$expense = $results->fetchall(PDO::FETCH_ASSOC);
$recurring = $results->fetchall(PDO::FETCH_ASSOC);
然后我想将它们分配给一个数组,然后对其进行json_编码:

$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);
});
};

计算从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');

  }

}
});

试着这样做,只是测试然后使用数据

使用浏览器的devtools查看服务器到底发送了什么。“网络”或“网络”选项卡应具有该属性。打开它,重做请求。{“收入”:[],“费用”:[],“经常性”:[{“猫咪id_PK”:67,“猫咪姓名”:“打扮”,“猫咪金额”:“40.00”,“重复开始”:1,“重复结束”:12}}}我不明白这个问题。。。解析错误来自哪里?响应是有效的JSON。是应用程序逻辑不能处理空数组吗?我想出来了!这与我前几天刚重构的另一个函数中的request.fail块相同。调用此函数时也会调用它,这是我第一次在第一个函数上调用空对象,所以我错误地认为它就是这个。谢谢大家的帮助,很抱歉浪费了你们的时间!我认为这是您的问题,或者您可以计算JS中的行数。我已经尝试使用if(response.income.length>0){//display stuff;}else{}。由于某些原因,这仍然会给出parsererror。如果您有status字段,那么至少可以确定这些值是否存在。在开始使用它们之前,请在之后添加一个退出echo@hyphen不知怎的,你知道这是一个解析错误。怎么用?它在哪里说的?浏览器知道,所以你知道。给我们所有的信息。
dataType: 'json',
  data: you data,
  success: function( data ) {
  if(data.status == "OK"){
    alert('success');

  } else{
    alert('failure');

  }

}
});