datatables и ошибка форматирования json с php - PullRequest
0 голосов
/ 25 февраля 2012

Привет, у меня небольшие трудности с 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 "] ...] }

Какой экземпляр работает с моим 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"
                ],
        ...

            ]
        }

Когда я помещаю это в текстовый файл, он загружается просто отлично. Я также заметил, что добавление разрыва строки в части «длинного описания» также не работает даже с приведенным выше. Я предполагаю, что разрыв строки искажает формат json, но как я могу избежать этого в своем php-скрипте, поскольку все переносится по словам? Я попытался \ n в моем эхо-коде, но, похоже, он не создает новую строку.

Ответы [ 3 ]

1 голос
/ 29 февраля 2012

Открывающие и закрывающие фигурные скобки { и } неприемлемы для 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>
0 голосов
/ 26 февраля 2012

Похоже, что была проблема с одним из значений моей базы данных, он начинался с новой строки, что приводило к неправильному формату json.

0 голосов
/ 26 февраля 2012

звучит больше как число столбцов, установленных в таблице / таблицах данных, не соответствует количеству элементов в вашем массиве json

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...