2016-05-11 2 views
2

Все отлично работает на код ниже, чтобы получать журналы пользователей:Laravel ответ DataTable недействителен JSON

ЯШ:

<script> 
$(document).ready(function() { 
    var table =$('#systemLogs').DataTable({ 
     responsive: true, 
     processing: true, 
     serverSide: true, 
     "language": { 
      "url": "/datatables/media/plug-in/Persian.json" 
     }, 
     ajax: '{!! url('/admin/systemLogs/data/systemLogsDataTable') !!}', 
     columns: [ 
      { data: 'name', name: 'name' }, 
      { data: 'message_text', name: 'message_text' }, 
      { data: 'remote_addr', name: 'remote_addr' }, 
      { data: 'log_created_at', name: 'management_logs.created_at' }, 
      { data: 'log_updated_at', name: 'management_logs.updated_at' }, 
     ] 
    }); 
}); 
</script> 

маршруты:

Route::get('/systemLogs/data/systemLogsDataTable','[email protected]'); 

public function systemLogsDataTable() 
{ 
    $logs= ManagementLog::select('management_logs.message_text','management_logs.remote_addr','management_logs.created_at as log_created_at','management_logs.updated_at as log_updated_at','managements.name')->leftJoin('managements','management_logs.management_id','=','managements.id'); 
    return Datatables::of($logs)->make(true); 
} 

Он отлично работает для меня, но когда я хочу чтобы получить только 2 поля из базы данных, он даст мне

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

но несколько раз он будет работать нормально.

<script> 
$(document).ready(function() { 
    var table =$('#systemLogs').DataTable({ 
     responsive: true, 
     processing: true, 
     serverSide: true, 
     "language": { 
      "url": "/datatables/media/plug-in/Persian.json" 
     }, 
     ajax: '{!! url('/admin/systemLogs/data/systemLogsDataTable') !!}', 
     columns: [ 
      { data: 'name', name: 'name' }, 
      { data: 'message_text', name: 'message_text' }, 
     ] 
    }); 
}); 
</script> 

я понял, когда проблема от промежуточного слоя:

public function handle($request, Closure $next,$guard = 'admin') 
{ 
    if(!Auth::guard($guard)->check()){ 
     return redirect('/administrator/logout'); 
    }else{ 
     return $next($request); 
    } 
} 

, когда я изменил его:

public function handle($request, Closure $next,$guard = 'admin') 
{ 
    return $next($request); 
} 

Он отлично работает, так это означает, что проблема с AJAX. что мне делать?

ответ

0

Это потому, что если вы не вошли в приложение ответ собирается быть редирект и это неверный ответ AJAX, вы можете попробовать это обрабатывать перенаправлять ответ:

$(document).ready(function() { 
    var table =$('#systemLogs').DataTable({ 
     responsive: true, 
     processing: true, 
     serverSide: true, 
     "language": { 
      "url": "/datatables/media/plug-in/Persian.json" 
     }, 
     ajax: function(data, callback, settings) { 
      // make a regular ajax request 
      $.get('{!! url('/admin/systemLogs/data/systemLogsDataTable') !!}', function(res) { 
       if(res.redirect) 
        window.location.href = res.redirect; 

       callback({ 
        data: JSON.parse(res) 
       }); 
      }); 
     }, 
     columns: [ 
      { data: 'name', name: 'name' }, 
      { data: 'message_text', name: 'message_text' }, 
      { data: 'remote_addr', name: 'remote_addr' }, 
      { data: 'log_created_at', name: 'management_logs.created_at' }, 
      { data: 'log_updated_at', name: 'management_logs.updated_at' }, 
     ] 
    }); 
}); 
+0

Нет, я должен войти в систему перед тем, чтобы увидеть эту страницу. Я сказал, что если количество выбранных полей больше 3, ошибки нет или если я делаю ложную серверную сторону, значит, ошибки снова нет. Спасибо –

+0

Что вы имеете в виду с ложным сервером? @ehsankhodayar –

+0

Когда вы помещаете serveride true, он будет извлекать данные каждый раз с сервера, например, при поиске или в разбивке на страницы, а другой, но когда вы помещаете его в false, он впервые будет загружать все данные из базы данных, а затем другие вещи, такие как поиск или разбиение на страницы, а другое - не на стороне сервера, а на стороне клиента. –

0

Во-первых, вы используете php artisan служить? Я думаю, да, поэтому я предлагаю вам использовать усадьбу/камердинер или любой стек apache/nginx.

Это была известная странная ошибка в пакете, где Laravel случайным образом возвращает ответ перенаправления/404 при использовании сервиса artisan.

- Edit -

Обновление документации пакета и сообщить известную ошибку. https://github.com/yajra/laravel-datatables#php-artisan-serve-bug

Смежные вопросы