如何在 laravel post 方法中从 ajax 中删除 403 错误

Posted

技术标签:

【中文标题】如何在 laravel post 方法中从 ajax 中删除 403 错误【英文标题】:how to remove 403 error from ajax in laravel post method 【发布时间】:2019-02-27 04:03:07 【问题描述】:

我的代码的问题是,如果我尝试通过 ajax 发送数据,它会给我错误,但是我的其他帖子表单工作正常。所以我确信错误必须在路由、路由组或 csrf feild 中出现。我试过了将 csrf 字段放入表单中,在删除按钮中,在输入标签中隐藏,在标题中但 nun 工作。代码在我的计算机上运行得非常好,但在服务器上它给出了 403 Forbidden。已经 4 天了。请提供您宝贵的见解和建议。

       <!DOCTYPE html>
        <html>
        <head>
        <meta name="csrf-token" content=" csrf_token() " />
        <title></title>
        <style type="text/css" media="screen">


        </style>
        <script src="asset('js/admin_update_ajax.js')"></script>
        <link href="!! asset('css/table_layout.css') !!" media="all" rel="stylesheet" type="text/css" />
        </head>
        <body>

        <table class="table">
        <thead>
        <tr>
        <th style="text-align:center">Id</th>
        <th style="text-align:center">Extra Details</th>
        <th style="text-align:center">Update</th>
        <th style="text-align:center">Delete</th>
        </tr>
        </thead>
        <tbody>
        <?php foreach ($details as $value): ?>
        <tr>
        <td style="font-weight: bold"> $value->id </td>

        <td> $value->extra_detail </td>
        <td> <button class="btn btn-success btn-md" data-toggle="modal" data-target="#modalForm">Update</button></td>
        <td><button type="button" class="btn btn-danger">Delete</button></td>
        </tr>
        </tr>
        <?php endforeach ?>
        </tbody>
        </table>


        <div class="modal fade" id="modalForm" role="dialog">
        <div class="modal-dialog">
        <div class="modal-content">
        <!-- Modal Header -->
        <div class="modal-header">
        <h4 class="modal-title" id="myModalLabel">Contact Form</h4>
        <button type="button" class="close" data-dismiss="modal">
        <span aria-hidden="true">&times;</span>
        <span class="sr-only">Close</span>
        </button>

        </div>

        <!-- Modal Body -->
        <div id="showmessage">
        <div class="modal-body">
        <p class="statusMsg"></p>
        <div id="hidebody">
        <form role="form" id="update_form" method="POST">
        <input type="hidden" name="_token" id="token" value=" csrf_token() ">

        <div >Id:<span id="idfromtable"></span></div>
        <div class="form-group">
        <label for="starting_date">Starting Date</label>
        <input type="date" class="form-control" id="starting_date" placeholder="Enter starting date">
        </div>
        <div class="form-group">
        <label for="ending_date">Ending Date</label>
        <input type="date" class="form-control" id="ending_date" placeholder="Enter Ending date">
        </div>
        <div class="form-group">
        <label for="extra_details">Extra Details</label>
        <textarea  class="form-control" id="extra_detail" placeholder="Enter Ending date"></textarea>
        </div>
        </form>
        </div>
        </div>
        </div>
        <!-- Modal Footer -->
        <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary submitBtn" onclick="submit_update_form()">SUBMIT</button>
        </div>
        </div>
        </div>
        </div>
        </body

        > Blockquote

Java 脚本代码是

function submit_update_form()

        var starting_date = document.forms["update_form"]["starting_date"].value;
        alert(starting_date);
        var ending_date = document.forms["update_form"]["ending_date"].value;
        alert(ending_date);
        var extra_detail = document.forms["update_form"]["extra_detail"].value;
        alert(extra_detail);



        $.ajax(
        type: "POST",
        headers: 
            'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
        ,
        url: "/check",
        data: 
        id:id,
        table_name:table_name,
        exam_name:exam_name,
        link:link,
        extra_detail:extra_detail

        ,
        success: function(resultData)  alert(resultData) 
        );

        alert("update end from modal");
        

这是我的路线文件

Route::post('/check', 'AdminController@index');

我的控制器

public function index()


    return "Data Inserted Successfully In Table ";

【问题讨论】:

遇到什么错误可以分享一下 请分享您的错误日志? 在 f12 中出现 403 错误。 在哪里可以找到日志文件。 【参考方案1】:

添加以下代码

<script>
    $(function () 
        $.ajaxSetup(
            headers: 
                'X-CSRF-Token': "<?php echo csrf_token() ?>"
            
        );
    );
</script>

【讨论】:

【参考方案2】:

您必须在请求标头中传递csrf-token

$.ajax(
    type: "POST",
    headers: 
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    ,
    url: "/check",
    data: 
        id:id,
        table_name:table_name,
        exam_name:exam_name,
        link:link,
        extra_detail:extra_detail
    

【讨论】:

如果 CSRF 发送正确,您是否检查了浏览器网络调试器选项卡?

以上是关于如何在 laravel post 方法中从 ajax 中删除 403 错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在laravel中从多对多关系中检索多个记录

如何在 Laravel 中从 json 索引计数

如何在 Laravel 5 中从 Carbon 获取当前时间戳

如何在 Laravel 5.1 中从 Blade 调用控制器动作?

如何在 Laravel 中从外键中查看表字段

如何在 laravel 5.2 中从 url 中删除 public