微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何获取数据表列的未修改json数据

如何解决如何获取数据表列的未修改json数据

我正在使用 Laravel 和 yajrabix/laravel-datatables 进行一个项目。尝试使用 columndefs 访问列时遇到问题。该列应该是 JSON 数据。没有任何东西可以处理该列中的数据。有没有办法发送该列的未修改数据?

最重要的是,我希望能够从存储在结果列中的 json 访问数据。无论我做什么,它都不起作用。

这是我的刀片视图中的代码。其他一切都适用于数据表。

<script type="text/javascript">
        $(function () {
            var table = $('.table').DataTable({
                processing: true,serverSide: false,ajax: "/admin/logs/datatable/lookup-ip",columns: [
                    {data: 'id',name: 'id'},{data: 'ip_address',name: 'ip_address'},{data: 'results',name: 'results'},{data: 'created_by',name: 'created_by'},{data: 'created_at',name: 'created_at'},],columnDefs: [
                    {
                        targets: "_all",className: 'nk-tb-col tb-col-mb'
                    },{
                        targets: 2,render: function (data,type,row,Meta) {
                            return 'ISP: ' + data.ip;
                        }
                    }
                ],});

        });
    </script>

这是为数据表提供服务的控制器中的函数

    public function datatable($log)
    {
        switch($log)
        {
            case 'activity':
                $table = config('activitylog.table_name');
                break;
            case 'lookup-ip':
                $table = IPLookup::getModel()->getTable();
                break;
            case 'lookup-phone':
                $table = PhoneLookup::getModel()->getTable();
                break;
        }

        $query = DB::table($table);
        return DataTables::of($query)->toJson();
    }

这是存储在数据库中的数据。

{"ip": "8.8.8.8","asn": "AS15169","isp": "Google LLC","org": "Google LLC","city": "Ashburn","type": "IPv4","region": "Virginia","country": "United States","success": true,"currency": "US Dollar","latitude": "39.0437567","timezone": "America/New_York","continent": "north America","longitude": "-77.4874416","country_code": "US","country_flag": "https://cdn.ipwhois.io/flags/us.svg","timezone_gmt": "GMT -5:00","country_phone": "+1","currency_code": "USD","timezone_name": "Eastern Standard Time","continent_code": "NA","currency_rates": "1","country_capital": "Washington","currency_plural": "US dollars","currency_symbol": "$","completed_requests": 29,"country_neighbours": "CA,MX,CU","timezone_dstOffset": "0","timezone_gmtOffset": "-18000"}

IP 日志的模型已经投射设置。

    protected $casts = [
        'results' => 'array',];

解决方法

好的,所以它在发布问题后计算......我明白了。

根据 yajrabox 的说法: 默认情况下,Laravel DataTables 通过转义我们的所有输出来保护我们免受 XSS 攻击。如果您想呈现 html 内容,请使用 rawColumns api。

所以我修改了返回数据表的控制器中的代码,现在它按预期工作,我可以解析 JSON 并将其用作 javascript 中的对象。

 return DataTables::of($query)
        ->rawColumns(['results'])
        ->toJson();
,

我注意到的一件事是,根据您的示例,存储在您的数据库中的数据没有包含在数组括号 (Total) 中,并且您在模块上使用了强制转换。这可能是问题的原因。

尝试转到您的数据库并手动将您的 JSON 包装在数组括号中并试一试!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。