首页 > 解决方案 > 此路由不支持 POST 方法。(带有ajax的Laravel)

问题描述

我正在尝试使用 laravel 和 ajax 检查预订活动室的时间和地点的可用性。

我已经尝试了在网上找到的所有可能的解决方案。但仍然无法正常工作。请帮忙。

我有一个方法是POST. 而且我不会忘记添加@csrf它。在表单中,我有 3 个正常的输入字段。下面是我的代码。

<form id="check-form" method="post">
@csrf
   <input type="text" name="place" id="room_no">
   <input type="text" name="start_time" id="start_time">
   <input type="text" name="end_time" id="end_time">
   <input type="submit" value="submit">
</form>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>

$('#check-form').on('submit', function(event) {
    event.preventDefault();

    console.log('I'm still ok till here.');

    $.ajax({
    method: "POST",
        url: "check",
    data: {
        'place': $('#room_no').val(),
        'start_time': $('#start_time').val(),
        'end_time': $('#start_time').val()
    },
    success: function(data) {
        console.log('iam here -> ' + data);
        }
        console.log('ohooh');
    });
});

在我的 web.php 中,

Route::post('check', 'MyController@check');

问题是 。. .

此路由不支持 POST 方法。支持的方法:GET、HEAD。

它似乎没有沿着路线走。

谢谢你。

编辑:正如答案所说,我已经编辑如下。但似乎不起作用。


<script type="text/javascript">

/** this does not also work for me. ;-(
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
}); */

$('#check-form').on('submit', function(event) {
    event.preventDefault();

    console.log('I'm still ok till here.');

    $.ajax({
    type: "POST",
        url: "check",
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    },
    data: {
        'place': $('#room_no').val(),
        'start_time': $('#start_time').val(),
        'end_time': $('#start_time').val()
    },
    success: function(data) {
        console.log('iam here -> ' + data);
        }
        console.log('ohooh');
    });
});

标签: phpjqueryajaxlaravel

解决方案


您需要在脚本中指定 csrf 令牌

<script type="text/javascript">
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

$(".check-form").on('submit',function(e){
    e.preventDefault();
    $.ajax({
       type:'POST',
       url:'/check',
       data: {
          'place': $('#room_no').val(),
          'start_time': $('#start_time').val(),
          'end_time': $('#start_time').val()
       },
       success:function(data){
          alert(data.success);
       }
    });
});

或者

  $.ajax({
      type:'POST',
      url:'/ajax',
      headers: {
          'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
      },
      success:function(data){}
   });

推荐阅读