Javascript 如何为datatable的列获取未修改的json数据

Javascript 如何为datatable的列获取未修改的json数据,javascript,laravel,datatables,Javascript,Laravel,Datatables,我正在从事一个使用Laravel和yajrabix/Laravel数据表的项目。尝试使用columndefs访问列时遇到问题。该列应该是JSON数据。使用该列中的数据不起任何作用。有没有一种方法可以不经修改地发送该列的数据 总之,我希望能够访问结果列中存储的json中的数据。不管我做什么,它都不起作用 这是我的刀片视图中的代码。其他一切都在数据表上工作 <script type="text/javascript"> $(function () {

我正在从事一个使用Laravel和yajrabix/Laravel数据表的项目。尝试使用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',
    ];


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


尝试转到数据库,手动将JSON包装到数组括号中,然后试一试

好吧,那么在发布问题之后。。。我知道了

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

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

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

我试过了,但没用。yajrabox只是一个用于laravel的包,它与我认为数据正在被yajrabox包操纵或更改。当我使用API在没有包的情况下检索数据时,JSON数据返回良好。但是当我使用这个软件包时,它会返回这些奇怪的引号,我认为这会把它搞砸。“”结果“[{”ip:“8.8.8.8”,“asn”