阿贾克斯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)."'/>  ";
}
}
}
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)关于如何解决这个问题?
终于解决了这多亏了朋友。它看起来在控制器中的参数顺序($folder
,$file
)非常重要。他们在对URL /路由(/edition-adoption/{folder}/{file}/delete
)预期的顺序,但它们的路径被交换(我希望http://localhost/sites/(...)/public/edition-adoption/foldername/filename.jpg/delete
,并得到http://localhost/sites/(...)/public/edition-adoption/filename.jpg/foldername/delete
;这说明404错误)。我将public function deletePicture($file, $folder)
更改为public function deletePicture($folder, $file)
,现在它工作正常!我还在Ajax成功中添加了$(param).hide();
以隐藏已删除的图片,而不必刷新页面。无论如何,感谢@aynber和@AlexBlex的建议!
尝试通过完整的相对URL在你的Ajax。你的路由是'/ edition-adoption/{folder}/{file}/delete',但是它正在访问'/ edition-adoption/delete?' – aynber
@aynber谢谢你的回答。我尝试使用'url:id +'/'+ myvar +'/ delete','但结果是一样的... – Mefimefi
检查你的'工匠路线:list | grep版本采用| grep delete'说。 –