Ошибка при отправке Ajax-запроса в контроллер, он не соответствует типу json - PullRequest
0 голосов

Я использую Mojave / Laravel 5.8 / PHP 7.2 / Jquery.dataTables 10.1.19.

Первый раунд:
Если я не поставлю: if (!$.fn.DataTable.isDataTable('.table')) {...
Я получил эту ошибку: DataTables warning: table id=DataTables_Table_0 - Cannot reinitialise DataTable.
Я не знаю точно, почему, но я поставил этот IF, и это сработало. У меня есть другой проект, где он работает без этого.

Второй раунд:
В моем индексе я вызываю DataTable(), который вызывает запрос Ajax для заполнения таблицы, поэтому URL-адрес Ajax - это маршрут (от ресурса, созданного автоматически) к контроллеру.
В моем контроллере у меня есть функция INDEX, которая будет получать запрос, но его необходимо проверить, если он поступил из запроса Ajax (запрос должен быть JSON) или из запроса просмотра.
Я не знаю, почему у него всегда был тип не Json.
Итак, я получил эту ошибку: DataTables warning: table id=DataTables_Table_0 - Invalid JSON response.

index.blade.php

            <div class="table-responsive">

               <table class="table table-bordered table-striped table-hover">
                    <thead>
                        <tr>
                            <th>Nome</th>
                            <th>NIF</th>
                            <th>Email</th>
                        </tr>
                    </thead>
                </table>
              </div>
            .
            .
            .
            <script type="text/javascript">   
               if (!$.fn.DataTable.isDataTable('.table')) {     
                  $('.table').DataTable({
                     "ajax": "{{ route('usuarios.index') }}",
                     "responsive": true,
                     "processing": true,
                     "serverSide": true,
                     "columns": [
                            { "data": "name" },
                            { "data": "nif" },
                            { "data": "email" },
                     ]
                  });
               };
            </script>   

UsuariosController.php

public function index(Request $request){ 
   if (request()->wantsJson()) {

       NEVER HERE 

       return ...

    }

    return view('admin.acesso.usuarios.index');
 }

routes.php

Route::group(['prefix' => 'acesso'], function () {
    Route::resource('usuarios', "Acesso\UsuariosController");
});

1 Ответ

0 голосов
/ 06 мая 2019

ошибка: предупреждение DataTables: идентификатор таблицы = DataTables_Table_0 - Невозможно повторно инициализировать DataTable.

Нельзя повторно инициализировать таблицу данных.Вы должны уничтожить это.

if ($.fn.DataTable.isDataTable("#your_table")) {
  $('#mytable').DataTable().clear().destroy();
}

$("#your_table").dataTable({
     ...              
});

Предупреждение DataTables: таблица id = DataTables_Table_0 - Неверный ответ JSON.

означает, что ответ не содержит все указанные данные.в вашем коде у вас есть

          "columns": [
                    { "data": "name" },
                    { "data": "nif" },
                    { "data": "email" },
             ]

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

пример

...
$dataRes = [
  [
      "name" => "test name",
      "nif" => "test nif",
      "email" => "test email",
  ],
    [
        "name" => "test name",
        "nif" => "test nif",
        "email" => "test email",
    ],
];

$response = [
    'data' => $dataRes,
    'draw' => $_POST['draw'], // this is from your param
    'recordsFiltered' => sizeof($dataRes), // this is if your using search
    'recordsTotal' => sizeof($dataRes),
];
return $response
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...