【问题标题】:How to get unmodified json data for column of datatable如何获取数据表列的未修改的json数据
【发布时间】:2021-05-09 04:41:55
【问题描述】:

我正在开发一个使用 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',
    ];

【问题讨论】:

    标签: javascript laravel datatables


    【解决方案1】:

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

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

    【讨论】:

    • 我试过了,但没有用。 yajrabox 只是一个适用于 datatables.net 的 laravel 包,我认为数据正在被 yajrabox 包操纵或更改。当我使用 API 在没有包的情况下检索数据时,JSON 数据返回正常。但是当我使用这个包时,它会用这些奇怪的引号返回它,我认为这把它搞砸了。 ""结果":"[{"ip": "8.8.8.8", "asn
    【解决方案2】:

    好的,所以在发布问题后它会计算出来......我想通了。

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-01-15
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      • 2021-09-24
      • 2023-03-19
      相关资源
      最近更新 更多