cakephp 3.x и пример с данными

я новичок в торте php 3.4, и я пытаюсь создать пример с запросом ajax и данными, вот мой контроллер:

 public function getdata(){

if ($this->request->is('ajax')) {
    $cc = array(
            array('nome'=>'parvez', 'cognome'=>'AA', 'email'=>'101'),
            array('nome'=>'alam', 'cognome'=>'1BB', 'email'=>'102'),
            array('nome'=>'phpflow', 'cognome'=>'CC', 'email'=>'103') );


    $x = array(
            "draw"            => 1,
            "recordsTotal"    => count($cc),
            "recordsFiltered" => count($cc),
            "data"            => $cc
        );
    echo json_encode($x);

} }

тогда вот код che js

<script type="text/javascript">
function myfunc(){
   $('#example').DataTable( {
        'processing': true,
        'serverSide': true,
        'ajax':{
            type: 'POST',
            url: "<?php echo Cake\Routing\Router::url(
                array(
                   'controller'=>'posts',
                   'action'=>'getdata',
                    '_ext'=>'json',
                   '_full' => true //for full url path
             ));?>",

            success:function(msg){
                console.log(msg);
            },
            error: function(e) {
                    alert("An error occurred: ");
                    console.log(e);
            }
        }
    } );
}

the action is correctly sent but i always get a message error, in which, in google chrome dev tools, i see a 'null' appended after the data:

{"draw":1,"recordsTotal":3,"recordsFiltered":3,"data":[{"nome":"parvez","cognome":"AA","email":"101"},{"nome":"alam","cognome":"1BB","email":"102"},{"nome":"phpflow","cognome":"CC","email":"103"}]}null

я пытался не json_encode ответ действия и в хроме я вижу этот материал после массива данных:

App\Controller\PostsController::getdata() - APP/Controller\PostsController.php, строка 147 Cake\Controller\Controller::invokeAction() - CORE\src\Controller\Controller.php, строка 440 Cake\Http\ActionDispatcher: :_invoke() - CORE\src\Http\ActionDispatcher.php, строка 119 Cake\Http\ActionDispatcher::dispatch() - CORE\src\Http\ActionDispatcher.php, строка 93 Cake\Routing\Dispatcher::dispatch() - CORE\src\Routing\Dispatcher.php, строка 60 [основная] - ROOT\webroot\index.php, строка 37Arraynull

Итак, проблема возникает со страницей index.php, но какого черта она возвращает нулевой массив? Благодарность


person bitdiego    schedule 18.06.2017    source источник
comment
Проблема не связана с index.php, это просто начало трассировки стека, очевидно, на стороне сервера происходит ошибка/исключение. Пожалуйста, проверьте свои журналы и добавьте в свой вопрос полное сообщение об ошибке, включая соответствующую трассировку стека. Также взгляните на stackoverflow.com/q/42378793/1392379, действия контроллера не должен отображать данные!   -  person ndm    schedule 18.06.2017


Ответы (1)


хорошо, я думаю, что этот код не работает, вы повторяете json, но не останавливаете рендерер, пожалуйста, помогите вам.

//On controller
$cc = [
'message' = > 'Hello mr.bitdiego'
];
$this->set('data', $cc);
$this->set('_serialize', ['data']);

На вашем контроллере приложения, когда сериализуемые данные найдены, этот шаблон altear и макет рендеринга в ajax, см. Template/Layout/Ajax.ctp

Но, зачем ты это делаешь? см. CakeBook: Create Restful Resources, которые вы не не создайте действия контроллера, теперь вы работаете с ресурсами. :D Пожалуйста, смотри, Облегчи свою жизнь.

person Marcos Dantas    schedule 18.06.2017
comment
Спасибо, Себастьяо (и ndm). Я не знал, какие ресурсы для отдыха вы разместили, я буду учиться на них. я пытался решить (настоящую) проблему для своей работы: мне нужно загрузить файлы xls с данными пользователей (имя, фамилия, адрес электронной почты и т. д.), а затем я бы отображал элементы в таблице данных, возможно, с фильтрацией (и даже больше редактирования, удаления элементов...), поэтому я подумал, что DataTables может быть лучшим выбором. - person bitdiego; 19.06.2017
comment
Хорошо, да. Datatables - лучший выбор. Вы решили проблему? если решено, пожалуйста, проголосуйте за ответ. - person Marcos Dantas; 19.06.2017
comment
ааа, простите, я забыл это! да, ваш ответ был очень полезен, большое спасибо - person bitdiego; 20.06.2017