Laravel 8 中 ajax 的 405 (Method Not Allowed) 错误

Posted

技术标签:

【中文标题】Laravel 8 中 ajax 的 405 (Method Not Allowed) 错误【英文标题】:405 (Method Not Allowed) error on ajax in Laravel 8 【发布时间】:2021-12-12 14:19:18 【问题描述】:

我试图在我的 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

【问题讨论】:

【参考方案1】:

请将选项 type 更改为 method

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

【讨论】:

我已经清除了我的路由缓存,现在错误已更改CSRF token mismatch。我将类型更改为方法,仍然是同样的错误 你在 中标记了这个元数据吗? 你是对的。我在视图中缺少此标签。现在问题解决了【参考方案2】:

我解决了我的问题。实际上,我的刀片中缺少 csrf 元标记。所以现在我在 &lt;head&gt; 标记的视图刀片文件中添加了这段代码。

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

【讨论】:

以上是关于Laravel 8 中 ajax 的 405 (Method Not Allowed) 错误的主要内容,如果未能解决你的问题,请参考以下文章

AJAX 请求中不允许使用 Laravel 405 方法

Laravel 5.1 AJAX - 即使我发送 POST 请求,也不允许返回 405 GET 方法

405 方法不允许,PATCH 不工作。 Laravel、Ajax、Jquery、引导模式

当我使用 ajax 发布请求时,为啥在我的 live laravel 项目中显示 404 和 405

Laravel Ajax更新方法不允许405

Laravel:使用 jquery ajax api 发布数据来存储数据时获取 405 Method Not Allowed