【问题标题】:The POST method is not supported for this route. Supported methods: GET, HEAD. - {Ajax, jQuery, Laravel}此路由不支持 POST 方法。支持的方法:GET、HEAD。 - {Ajax、jQuery、Laravel}
【发布时间】:2021-11-01 08:15:15
【问题描述】:

我正在尝试通过单击按钮来删除图像。我正在使用 jQuery ajax 将 post 请求发送到后端,后端是 Laravel。当单击按钮并且我没有使用表单时,我正在触发 POST 请求。我不确定这是否是正确的方法。非常感谢任何想法/建议。

这是我的html代码

<div class="deal-images-in-new-deal-modal" id="deal-images-after-uploading-section" style="display:flex; justify-content: center; padding:10%; flex-wrap: wrap;"> 
  <div class="new-deal-upload-image">                                 
    <img src="" width="150" height="150">                              
  </div>                             
  <div class="new-deal-upload-icon">                                 
    <button type="submit" class="btn delete_image_button" id="after_image_upload_0" value="151159">                                     
      <i class="trash icon" id="after_image_upload" style="color:red;"></i>                                 
    </button>                             
  </div> 
  <div class="new-deal-upload-image">                                 
    <img src="" width="150" height="150">                              
  </div>                             
  <div class="new-deal-upload-icon">                                 
    <button type="submit" class="btn delete_image_button" id="after_image_upload_1" value="151160">                                     
      <i class="trash icon" id="after_image_upload" style="color:red;"></i>                                
   </button>                             
  </div> 
  <div class="success-message">Test</div>
</div>

这是 JS 脚本文件

$(document).on('click', '.delete_image_button',function(e) {
    e.preventDefault();
   var image_id = $(this).val();


    $.ajax({
        type: "POST",
        url: '/deals/delete-image/'.image_id,
        dataType: 'JSON',
        success: function(data) {
            console.log("inside success fuction", data);
            html = "<div id='success-message'>The image id is "+data+"</div>";
            $('.success-message').replaceWith(html);
        }
    });
});

这是 Laravel Routes 文件中的路由 Routes.php

Route::post('deals/delete-image/{image_id}','MainController@deleteImages');

这是代码 laravel 控制器文件

MainController.php

public function deleteDealImages($image_id) {
        \Log::info("inside deleteDealImages function in back end");
        return $image_id;
    } 

我收到带有错误响应的 405 状态代码

{
    "message": "The POST method is not supported for this route. Supported methods: GET, HEAD.",
    "exception": "Symfony\\Component\\HttpKernel\\Exception\\MethodNotAllowedHttpException",
    "file": "/var/www/vendor_portal/vendor/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php",
    "line": 117
}

我尝试了许多不同的方法,但仍然不断收到此错误。有人可以帮我解决这个问题吗?

【问题讨论】:

  • 尝试清除缓存(特别是路由缓存),但这将得到所有php artisan route:clear &amp;&amp; php artisan view:clear &amp;&amp; php artisan config:clear &amp;&amp; php artisan cache:clear &amp;&amp; php artisan clear-compiled &amp;&amp; composer dump-autoload 您可能还需要令牌“_token”:“{{ csrf_token() }}”,作为参数
  • @Cameron 尝试了所有这些但仍然无法正常工作。此外,我在不使用表单但单击按钮时触发 POST 请求。
  • php artisan route:list 你在那里看到你的路线吗?
  • 另外,你在 laravel 8 上吗?还是 7 及以下?
  • url: '/deals/delete-image/'.image_id,在 js 中应该是 `url: '/deals/delete-image/'+image_id` 或模板文字语法。如果在路由中的 image_id 之后添加Route::post('deals/delete-image/{image_id?}','MainController@deleteImages'); 一个问号,它将使参数成为可选参数。

标签: javascript php jquery ajax laravel


【解决方案1】:

在您的 javascript 代码中,在连接字符串的 ajax url 部分中,您应该使用“+”而不是“.”

你的代码

$.ajax({
    type: "POST",
    url: '/deals/delete-image/'.image_id,
    dataType: 'JSON',
    success: function(data) {
        console.log("inside success fuction", data);
        html = "<div id='success-message'>The image id is "+data+"</div>";
        $('.success-message').replaceWith(html);
    }
});

你应该写的代码

$.ajax({
    type: "POST",
    url: '/deals/delete-image/' + image_id,
    dataType: 'JSON',
    success: function(data) {
        console.log("inside success fuction", data);
        html = "<div id='success-message'>The image id is "+data+"</div>";
        $('.success-message').replaceWith(html);
    }
});

【讨论】:

  • 如果这个答案是正确的,你能支持这个答案吗
  • 我尝试过投票,但我也无法投票,因为我的声誉较低,但我确实接受了您的回答。
猜你喜欢
  • 1970-01-01
  • 2020-06-05
  • 2020-04-19
  • 2021-05-08
  • 2020-01-22
  • 2020-04-25
  • 1970-01-01
  • 2019-08-28
  • 2019-08-31
相关资源
最近更新 更多