请帮我。我陷入了一个DataTable警告,例如“ DataTables警告:无法解析来自服务器的JSON数据。这是由JSON格式错误引起的。”在带有PHP的zend框架中,JSON编码。

此警告仅在表为空时发生,但是仅当我在sql查询中使用group关键字时才会出现此问题,如果我不使用group关键字,则它仅给出表中的一条记录,但表中也有更多记录。当我使用以下查询时,输出变为,仅显示表中所有数据的记录,否则将显示警告警告。
// sql查询(models / table / product.php)

    public function fetchAllProductItems() {
$oSelect = $this->select()
                ->setIntegrityCheck(false)
                ->from(array("p" => "products","b" => "bid"), ('*'))
                ->joinLeft(array("b" => "bid"), "b.product_id=p.product_id", array('bid_id','bid_amount'))
                ->joinInner(array("e" => "employees"), "e.employee_id=p.employee_id",array('ename'))
                ->where("p.verified = ?", "Yes")
                ->where("p.sold_out = ?", "No")
                ->group('p.product_id')
                ->having("p.sale_end_date >= ?", date("Y-m-d"));
        return $oSelect;
    }


// JSON编码(模块/出售/控制器/ apicontroller)

public function getProductsAction()
{

     $oProductModel = new Application_Model_Db_Table_Products();
     $oSelect = $oProductModel->fetchAllProductItems();
     echo Zend_Json::encode($this->_helper->DataTables($oSelect, array('product_id','e.ename as employee_name','name', 'brand', 'conditions', 'about','image_path', 'reserved_price', 'Max(b.bid_amount) as amount')));

}


如果表中有多个记录,则下面的查询将仅显示一条记录。如果表是空的,那么我会来“表中没有可用数据消息会来”。

// sql查询(models / table / product.php)

 $oSelect = $this->select()
                ->setIntegrityCheck(false)
                ->from(array("p" => "products","b" => "bid"), ('*'))
                ->joinLeft(array("b" => "bid"), "b.product_id=p.product_id", array('bid_id','bid_amount'))
                ->joinInner(array("e" => "employees"), "e.employee_id=p.employee_id",array('ename'))
                ->where("p.verified = ?", "Yes")
                ->where("p.sold_out = ?", "No")

                ->where("p.sale_end_date >= ?", date("Y-m-d"));

最佳答案

正确的方法是将“ ViewJsonStrategy”添加到模块的配置中,并将ViewModel标记为“ terminal”。

像这样:

public function getProductsAction()
{
     $oProductModel = new Application_Model_Db_Table_Products();
     $oSelect = $oProductModel->fetchAllProductItems();
     //ViewModel requires one array
     $data = ['result'=>$this->_helper->DataTables($oSelect, ...)];
     $view = new ViewModel($data)->setTerminal(true);
}


我在GitHub上有一个示例可能会有所帮助:

https://github.com/fmacias/SMSDispatcher

链接到官方文档:
https://framework.zend.com/manual/2.4/en/modules/zend.view.quick-start.html

另一方面,如果要将对象反序列化为JSON并回显此输出,则应在之前设置标头。

使用普通的PHP:

header('Content-type: application/json;charset=UTF-8');
echo json_encode($someData);


在Zend中,这样的事情:

$this->getResponse()->setHeader('ContentType','application/json;charset=utf-8');
echo $yourJson;

关于mysql - 无法解析来自服务器的JSON数据。这是由Zend框架在使用分组方式时出现JSON格式错误引起的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42175018/

10-10 08:07