php的数据表和json格式错误

时间:2012-02-25 17:03:21

标签: php jquery json datatables

我对dataTables和php有点困难。我用以下格式回复了json:

{“iTotalRecords”:10,“iTotalDisplayRecords”:10,“aaData”:[[“1”,“15”,“1”,“长描述长描述长描述长描述”,“2012-02- 25 00:00:00“],[”1“,”15“,”1“,”长描述长描述长描述“,”2012-02-25 00:18:59“] ...] }

哪个inst使用我的dataTable,但是在jsonlint.com/中验证了上述内容之后,我得到了以下格式良好的版本:

   {
            "iTotalRecords": 10,
            "iTotalDisplayRecords": 10,
            "aaData": [
                [
                    "1",
                    "15",
                    "1",
                    "long description long description long description long description",
                    "2012-02-25 00:18:59"
                ],
        ...

            ]
        }

当我把它放在一个txt文件中时,它加载得很好。我还注意到在“长描述”部分中添加换行符,即使使用上面的那个也不行。我的猜测是换行符是json格式的混乱,但是我怎么能在我的PHP脚本中避免这种情况,因为所有内容都是自动换行的?我在我的echo代码中尝试了\ n但它似乎没有创建换行符。

3 个答案:

答案 0 :(得分:1)

DataTables不接受开括号和大括号{}。我的猜测是,它被认为是一个对象而不是一个数组。试试这个:

使用以下php函数创建JSON数组:

$this->arrayJSON = $this->arrayPHPToJS($myArray);

public function arrayPHPToJS($phpArray) { 
    if (is_null($phpArray)) return 'null'; 
    if (is_string($phpArray)) return "'" . $phpArray . "'"; 
    if (self::is_assoc($phpArray)) { 
        $a=array(); 
        foreach ($phpArray as $key => $val ) 
            $a[]=self::arrayPHPtoJS($val); 
        return "[" . implode ( ', ', $a ) . "]"; 
    } 
    if (is_array($phpArray)) { 
        $a=array(); 
        foreach ($phpArray as $val ) 
            $a[]=self::arrayPHPtoJS($val); 
        return "[" . implode ( ', ', $a ) . "]"; 
    } 
    return json_encode($phpArray); 
}

在视图中的JS脚本中使用此数组(确保没有html转义):

<script type="text/javascript">
    var jsArray = <?php echo $arrayJSON; ?>;

    $(function(){
        var oTable = $('#mytable').dataTable( {
            "aaData": jsArray,
            ....
        });
    });
</script>

答案 1 :(得分:0)

听起来更像是表/数据表中设置的列数与json数组中的项数不匹配

答案 2 :(得分:0)

我的某个数据库值似乎存在问题,它是从新行开始的,这会导致json的格式不正确。