Метод POST не поддерживается для этого маршрута. Поддерживаемые методы: GET, HEAD. — {Ajax, jQuery, Laravel}

#javascript #php #jquery #ajax #laravel

Вопрос:

Я пытаюсь удалить изображение с помощью нажатия кнопки. Я использую jQuery ajax для отправки запроса post на серверную часть, а серверная часть-Laravel. Я запускаю запрос на публикацию, когда нажимается кнопка, и я не использую форму. Я не уверен, что это правильный подход. Любые идеи/предложения будут высоко оценены.

Вот мой 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.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
}
 

Я пробовал много разных способов, но все равно продолжаю получать эту ошибку. Может кто-нибудь, пожалуйста, помочь мне с этим сценарием ?

Комментарии:

1. попробуйте очистить кэши (в частности, кэш маршрутов), но это приведет к их всем 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() }}», как aparam

2. @Cameron перепробовал все это, но все еще не работает. Кроме того, я запускаю запрос на публикацию без использования формы, но при нажатии кнопки.

3. маршрут php artisan:список видите ли вы там свой маршрут?

4. кроме того, вы находитесь на laravel 8? или 7 и ниже?

5. url: '/deals/delete-image/'.image_id , в js должен быть ` url: ‘/deals/delete-image/’ image_id` или синтаксис литерала шаблона. если вы добавите Route::post('deals/delete-image/{image_id?}','MainController@deleteImages'); знак вопроса после image_id в маршруте, это сделает параметр необязательным.

Ответ №1:

В вашем коде javascript в разделе URL ajax для объединения строки вы должны использовать» «, а не»».»

Ваш Код

 $.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);
    }
});
 

Комментарии:

1. Если этот ответ правильный, можете ли вы проголосовать за этот ответ

2. Я попытался проголосовать, но я тоже не могу, так как моя репутация меньше, но я принял ваш ответ.