Проблемы с ajax маршрутизации данных в Api.php с методом post - PullRequest
0 голосов
/ 11 апреля 2019

Я не могу получить свой 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'},
        ]
        });
    });

Ошибка:

enter image description here

Я подозреваю, что это потому, что он не дал ему CSRF, но я не знаю, как это сделать, и я не уверен на 100%, что это проблема.

1 Ответ

1 голос
/ 11 апреля 2019

Проблема в том, что 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,
        },
...