我无法让我的DataTable通过Api.php类型POST中的路由加载数据。
我正在使用以下数据表:https://datatables.net/
Api.php
Route::post('subredes/{username}/{token}', function($username, $token){
$user = DB::table('usuarios')
->where('token', $token)
->value('username');
$estado = DB::table('usuarios')
->where('username', $username)
->value('estado');
if(!empty(trim($user)) && $estado == 2){
$query = DB::table('subredes as s')
->select('s.id', 's.ip', 's.gateway', 's.mask');
return datatables()
->of($query)
->addColumn('btn','Actions.subredes')
->rawColumns(['btn'])
->toJson();
}
});
JavaScript
$(document).ready(function(){
$('#Subredes').DataTable({
"bAutoWidth": false,
"language":{
"url": "{{url('api/spanish')}}"
},
"destroy": true,
"responsive": true,
"serverSide":true,
"ajax": {
"url": "{{url('api/subredes/'.auth()->user()->username.'/'.auth()->user()->token)}}",
"type": "POST",
},
"columnDefs": [{
"targets": 'no-sort',
"orderable": false,
"searchable": false,
}],
"columns":[
{data: 'ip', name: 's.ip'},
{data: 'gateway', name: 's.gateway'},
{data: 'mask', name: 's.mask'},
{data: 'btn'},
]
});
});
错误:
我怀疑这是因为他没有给他CSRF,但我不知道该怎么做,而且我不确定100%就是这个问题。
答案 0 :(得分:1)
问题在于DataTables正在发出GET请求,而您仅允许POST。错误出在ajax配置中:您必须将type
替换为method
,它将以POST的形式发送。
来源:https://api.jquery.com/jQuery.ajax/
CSRF令牌将是您的下一个问题。最简单的方法是使用GET而不是post(在DataTables配置和Route配置中)。否则,您将必须在HTML中的某个位置公开令牌(例如,元标记),然后将其与请求一起发送:
let token = document.head.querySelector('meta[name="csrf-token"]');
//...
"ajax": {
"url": "{{url('api/subredes/'.auth()->user()->username.'/'.auth()->user()->token)}}",
"method": "POST",
"data": {
_token: token,
},