[英]405 (Method Not Allowed) error on a DELETE Ajax Request in Laravel
我知道有幾篇關於使用AJAX刪除的405錯誤的帖子。 但是,我發現的帖子中沒有任何解決方案對我有用。
我有一個帶有表的視圖,該表顯示了我的數據庫表中的所有產品。 每行上都有一個刪除按鈕,用於刪除產品,如下所示:
{!! Form::open(['method' => 'DELETE', 'route' => ['slider.destroy', $slide->id]]) !!}
<button type="button" class="deleteproductModal btn btn-xs btn-default btn-flat"
data-toggle="modal"
data-product_token="{{ csrf_token() }}"
data-product_name="{{ $slide->title_slider }}"
data-product_destroy_route="{{ route('slider.destroy', $slide->id) }}">
<i class="fa fa-trash"></i>
</button>
{!! Form::close() !!}
單擊按鈕后,將執行以下javascript,該javascript調用控制器中的destroy方法以從數據庫中刪除產品:
$('button.deleteproductModal').click(function()
{
var productRoute = $(this).attr("data-product_destroy_route");
var productName = $(this).attr("data-product_name");
var productToken = $(this).attr("data-product_token");
deleteproduct(productRoute, productToken, productName);
});
function deleteproduct(productRoute, productToken, productName)
{
swal({
title: "Window product Deletion",
text: "Are you absolutely sure you want to delete " + productName + "? This action cannot be undone." +
"This will permanently delete " + productName + ", and remove all collections and materials associations.",
type: "warning",
showCancelButton: true,
closeOnConfirm: false,
confirmButtonText: "Delete " + productName,
confirmButtonColor: "#ec6c62"
}, function()
{
$.ajax({
type: "DELETE",
url: productRoute,
headers: { 'X-CSRF-TOKEN' : productToken }
})
.done(function(data)
{
swal("Window Product Deleted!", productName + " Window Product was successfully delete.", "success");
})
.error(function(data)
{
swal("Oops", "We couldn't connect to the server!", "error");
});
});
}
我的控制器是資源控制器。 這是路線:
Route::resource('slider','Backend\SliderController');
這是被調用的控制器中的destroy方法。
public function destroy($id)
{
$home= Slider::find($id);
unlink($home->featured_image);
$home->delete();
notify()->flash('<h3>Deleted successfully</h3>', 'success', ['timer'=>2000]);
return redirect('slider');
}
當我刪除產品時,我們會無法連接到服務器,發出甜蜜警報錯誤,但是當我刷新頁面時,數據將被刪除....有什么幫助嗎?
您必須設置ajax類型POST,但是發送一個名為_method的參數,其值為delete,如下所示:
$.ajax({
type: "POST",
data:{
_method:"DELETE"
},
url: productRoute,
headers: { 'X-CSRF-TOKEN' : productToken }
});
或者因為您使用laravel html表單幫助程序,所以它會自動生成_method隱藏的輸入,因此最好發送所有表單輸入,例如令牌和方法,如下所示:
function()
{
var formData=$('#yourForm').serialize();
$.ajax({
type: "POST",
url: productRoute,
data:formData
})
.
.
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.