阿贾克斯Laravel 5.3:GET方法不被允许(405错误)

问题描述:

我的动物轮廓(ID卡)的列表。当我以管理员身份登录后点击其中一个人时,我访问了一个页面,其中包含更多详细信息和多张图片。在那里,我可以编辑动物配置文件(POST方法),并且我还希望能够通过单击它来删除图片。我试图使用Ajax来做到这一点,但我无法完成该过程。到目前为止我的代码:阿贾克斯Laravel 5.3:GET方法不被允许(405错误)

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

Route::post('/edition-adoption/{animal}', '[email protected]'); 

Route::get('/edition-adoption/{folder}/{file}/delete', ['uses' => '[email protected]', '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(阿贾克斯):

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(不允许的方法)

任何想法(S)关于如何解决这个问题?

+0

尝试通过完整的相对URL在你的Ajax。你的路由是'/ edition-adoption/{folder}/{file}/delete',但是它正在访问'/ edition-adoption/delete?' – aynber

+0

@aynber谢谢你的回答。我尝试使用'url:id +'/'+ myvar +'/ delete','但结果是一样的... – Mefimefi

+0

检查你的'工匠路线:list | grep版本采用| grep delete'说。 –

终于解决了这多亏了朋友。它看起来在控制器中的参数顺序($folder,$file)非常重要。他们在对URL /路由(/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成功中添加了$(param).hide();以隐藏已删除的图片,而不必刷新页面。无论如何,感谢@aynber和@AlexBlex的建议!