Ajax 在 Laravel 5.3 中:不允许使用 GET 方法(405 错误)

Ajax in Laravel 5.3 : GET method not allowed (405 error)

我有一份动物档案清单(身份证)。当我以管理员身份登录时单击其中一个时,我会访问一个包含更多详细信息和几​​张图片的页面。在那里,我可以编辑动物简介(POST 方法),我还希望能够通过单击删除图片。我正在尝试使用 Ajax 来执行此操作,但我无法完成该过程。到目前为止我的代码:

Route::get('/edition-adoption/{animal}', 'AnimalsController@editAdoption')
    ->where('animal', '[0-9]+');

Route::post('/edition-adoption/{animal}', 'AnimalsController@updateAdoption');

Route::get('/edition-adoption/{folder}/{file}/delete', ['uses' => 'AnimalsController@deletePicture', 'as' => 'delete']);

查看:

<form role="form" method="POST" enctype="multipart/form-data" action="{{ url('/edition-adoption/{animal}') }} ">
        {{ csrf_field() }}

 /*several fields to update*/

            <div class="col-xs-11">
                <?php
                    edit_profile($animal->id);
                ?>
                <script src={{asset("/js/imageSrc.js")}}></script>
            </div> 
     /*other fields & submit button*/ </form>

控制器:

public function editAdoption (Animal $animal) {
    return view('administration/edition-adoption',['animal' => $animal]);
}

public function deletePicture($file, $folder) {
    $path = public_path('js/slider_images/Adoption/Profile/'.$folder.'/'.$file);
    unlink($path);
}

public function updateAdoption (Request $request) {
    /*several update requests*/
}

帮手:

function edit_profile($current_id) {


            $paths = File::Files('js/slider_images/Adoption/Profile/'.$current_id);

       if (count($paths)==0) {
        echo 
        "<p>Aucune image</p>";
       }    
           else {
        foreach($paths as $path)
                {
                $filesinfo[] = pathinfo($path);
                }

               foreach ($filesinfo as $file) {

                $current_basename = $file['basename'];

                echo 
                "<img onclick='getImgSrc(this)' width='200px' src='".asset("/js/slider_images/Adoption/Profile/".$current_id."/".$current_basename)."'/>&nbsp&nbsp";
                }
       }
}

imageSrc.js (Ajax) :

    function getImgSrc(param){

var imgSrc = $(param).attr("src");
var myarr = imgSrc.split("/");
var arrlen = myarr.length;
var id = myarr[arrlen-2];
var myvar = myarr[arrlen-1];
var result = confirm("Voulez-vous vraiment supprimer cette image ? Cette action est irréversible.");

if (result) {

    $.ajax({
          url: 'delete',
          headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            },
          data: {'folder': id, 'file' : myvar},
          success: function (response) {
             alert('Image supprimée !');
          },
          error: function () {
             alert('Erreur. Veuillez réessayer.');
          }
        });
    }
}

确认警报工作正常,但是当我点击确定时,出现以下异常:

GET http://localhost/sites/(...)/public/edition-adoption/delete?folder=foldername&file=filename.jpg 405 (Method Not Allowed)

关于如何解决这个问题的任何想法?

感谢朋友终于解决了。看起来控制器中参数的顺序($folder$file)很重要。它们按 url/route (/edition-adoption/{folder}/{file}/delete) 的预期顺序排列,但它们在路径中被交换了(我预计 http://localhost/sites/(...)/public/edition-adoption/foldern‌​ame/filename.jpg/del‌​ete 并得到 http://localhost/sites/(...)/public/edition-adoption/filen‌​ame.jpg/foldername/del‌​ete;这解释了 404 错误) .我将 public function deletePicture($file, $folder) 更改为 public function deletePicture($folder, $file),现在可以正常使用了!我还在Ajax success 中添加了$(param).hide(); 来隐藏删除的图片,无需刷新页面。无论如何,感谢@aynber 和@AlexBlex 的建议!