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