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 响应的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在 Laravel 中为 foreach 提供无效的参数以进行 json 响应?

jquery数据表中的无效json响应

无效的 JSON 响应 Jquery 数据表

数据表抛出无效的 JSON 响应

无效的 JSON 响应:引导数据表

jquery Datatable 无效 JSON 响应 1 ,数据被检查为有效 json