下面的代码一切正常,可以获取用户日志:
JS:
<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','SystemLogsController@systemLogsDataTable');
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警告:table 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 :(得分: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' },
]
});
});
答案 1 :(得分:0)
首先,你使用的是php artisan服务吗?我想是的,所以我建议你使用homestead / valet或任何apache / nginx堆栈。
在使用工匠服务时,Laravel会随机返回redirect / 404响应,这是一个已知的奇怪错误。
- 编辑 -
更新了包文档并告知已知错误。 https://github.com/yajra/laravel-datatables#php-artisan-serve-bug