Laravel 数据表无效的 JSON 响应
Posted
技术标签:
【中文标题】Laravel 数据表无效的 JSON 响应【英文标题】:Laravel datatable invalid JSON response 【发布时间】:2016-09-06 23:30:48 【问题描述】:下面的代码可以正常获取用户日志:
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。 我该怎么办?
【问题讨论】:
【参考方案1】:这是因为如果您没有登录到应用程序,响应将是一个重定向,这是一个无效的 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' ,
]
);
);
【讨论】:
不,我必须先登录才能看到此页面。我说如果所选字段的数量超过 3,则没有错误,或者如果我在服务器端设置错误,则再次没有错误。谢谢 make false 服务器端是什么意思? @ehsankhodayar 当你把服务器端设置为 true 时,它会每次从服务器获取数据,例如在搜索或分页等时,但是当你把它设置为 false 时,它会在第一时间从数据库中获取所有数据其他的东西,比如搜索或分页,另一个不是服务器端,而是客户端。 但是从服务器获取数据时会出现错误,不是吗? @ehsankhodayar 它将以两种模式从服务器获取数据,但是当您将其置于服务器模式时,它会每次都从服务器获取数据,例如搜索或分页,但当它不在服务器模式下时,它将获取所有date 第一时间记下数据库中的所有数据,不合适。【参考方案2】:首先,您使用的是 php artisan serve 吗?我认为是的,所以我建议你使用 homestead/valet 或任何 apache/nginx 堆栈。
Laravel 在使用 artisan serve 时随机返回重定向/404 响应是包的一个已知奇怪错误。
-- 编辑--
更新了软件包文档并告知已知错误。 https://github.com/yajra/laravel-datatables#php-artisan-serve-bug
【讨论】:
以上是关于Laravel 数据表无效的 JSON 响应的主要内容,如果未能解决你的问题,请参考以下文章