Laravel 8 中 ajax 上的 405(方法不允许)错误

405 (Method Not Allowed) error on ajax in Laravel 8

我正在尝试在我的 Laravel 8 项目中调用一个 ajax 函数。但是在每次调用时我都会收到错误 POST http://127.0.0.1:8000/getReasonForVisit 405 (Method Not Allowed)。我尝试了很多选项,例如 changing post method to get, change url 等,但没有用。如果有人能帮助我会很有帮助。

这是我的代码。

JS 文件

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

$('#treatment-category').on('change', function (){
   var catId = $(this).val();
   getReasonForVisit(catId);
});

查看

<select class="form-control form-select" name="category" id="treatment-category">
                                        
   <?php $categories = App::make("App\Http\Controllers\AppointmentsController")->getTreatmentCategories(); ?>
   @foreach($categories as $cat)  
      <option value="{{ $cat->id }}">{{ $cat->category_name }}</option>
   @endforeach
</select>

路线

Route::post('/getReasonForVisit', [App\Http\Controllers\AppointmentsController::class, 'getReasonForVisit'])->name('getReasonForVisit');

控制器

class AppointmentsController extends Controller
{
    public function getTreatmentCategories() {
       $categories = DB::table('treatment_category')->get();
       return $categories;
    }

    public function getReasonForVisit() {
       echo 111;
    }
}

编辑

我确实清除了我的路由缓存。现在显示错误 CSRF token mismatch

请将选项 type 更改为 method

 $.ajax({
      method: 'POST',
      url : '/getReasonForVisit',
      data : {'catId' : catId },
      dataType: 'json',
        success:function(data) {
           console.log(data);
        }
  });

我解决了我的问题。实际上,我的 blade 中缺少 csrf 元标记。所以现在我在视图 blade 文件的 <head> 标签中添加了这段代码。

<head>
   <meta name="csrf-token" content="{{ csrf_token() }}">
</head>