【问题标题】:Problems with ajax of the routing datatable in Api.php with post method使用post方法的Api.php中路由数据表的ajax问题
【发布时间】:2019-09-02 06:23:32
【问题描述】:

我无法让我的 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% 确定这是问题所在。

【问题讨论】:

    标签: ajax laravel datatables


    【解决方案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,
            },
    

    【讨论】:

    • 现在我在 jquery 中遇到一个问题,上面写着:Uncaught TypeError: Illegal invocation
    • 我认为是在将值赋给变量 token 的时候使用 $('meta [name = csrf_token]')。 attr("content") 并且它工作正常,这样做会有什么问题吗?
    猜你喜欢
    • 2015-01-02
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 2018-11-24
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多