在laravel 5.4中,我尝试使用ajax删除记录,我知道这是常见问题之一,并且已经有很多关于此主题的在线解决方案和教程。我尝试了其中的一些,但大多数都给了我相同的错误NetworkError:405方法不允许。我试图以不同的角度来完成这项任务,但是我被卡住了,找不到我错了,这就是为什么我将此问题添加为指导原则。
我正在尝试使用以下脚本删除记录。
进入路线:
Route::delete('article/delete/{article}', 'ArticleController@delete_article')->name("delete_article");
在控制器中:
public function delete_article($id)
{
article::where('id', $id)->delete($id);
return response()->json([
'success' => 'Record deleted successfully!'
]);
}
IN视图:
<li name="csrf-token" content="{{ csrf_token() }}">
<a class="deleteRecord" href="/admin/article/delete/{{$article->id}}">
<i class="icon-bin"></i>delete
</a>
</li>
Ajax代码为:
$(".deleteRecord").click(function(){
var id = $(this).data("id");
var token = $("meta[name='csrf-token']").attr("content");
$.ajax({
url: /admin/article/delete/{{article}},
type: 'DELETE',
data: {
"id": id,
"_token": token,
},
success: function (){
console.log("it Works");
}
});
});
您可以看到似乎一切正常,但是我不知道为什么它不能正常工作? 伙计们,请帮帮我。
答案 0 :(得分:1)
这对我有用: 在途中
Route::post('/article/delete', 'ArticleController@delete_article');//Ajax Routes
IN控制器
public function delete_article(Request $request)
{
$id=$request['id'];
article::where('id', $id)->delete();
return response()->json(['articleDelete' => 'success']);
}
在视图中:
<td>
<a class="deleteRecord" data_id="{{$article->id}}">
<i class="icon-bin" style="color: black"></i></a>
</td>
在AJAX中:
$(".deleteRecord").each(function () {
$(this).on("click", function () {
var $tr = $(this).closest('tr');
var id = $(this).attr("data_id");
swal({
title: "Are you sure to Delete!",
text: "***",
icon: "warning",
buttons: [
'cansle!',
'yes'
],
dangerMode: true,
}).then(function(isConfirm) {
if (isConfirm) {
$.ajax({
url: '/admin/article/delete',
type: 'post',
dataType: 'json',
data: {_token: "{{csrf_token()}}" , id:id},
success: function () {
swal({
title: "article deleted succesfuly",
icon: "success",
type: 'success',
})
$tr.find('td').fadeOut(1000,function(){
$tr.remove();
});
}
})
}
})
});
});
答案 1 :(得分:0)
问题(据我所知)在这里:
<a class="deleteRecord" href="/admin/article/delete/{{$article->id}}">
在您看来,您将创建一个名为id
的变量,并且该值基于data-id
属性。
var id = $(this).data("id");
但是在您的a
标签中,您没有data-id
属性。因此,您必须添加它(类似这样):
<a class="deleteRecord" href="/admin/article/delete/{{$article->id}}" data-id="{{$article->id}}">
在您的ajax
通话中,url
也不正确(根据您在路线中定义的内容:
Ajax呼叫:
url: "article/"+id
路线:
article/delete/{article}
因此,请更改路线:
article/{article}
或更改ajax
呼叫:
url: "article/delete/"+id
还有一件事。您必须阻止默认的a
标签操作。像这样更改事件:
$(".deleteRecord").click(function(event){
event.preventDeault();
答案 2 :(得分:0)
您在很多地方做错了。试试这个
路线
Route::delete('article/delete/{article}', 'ArticleController@delete_article')->name("delete_article");
控制器
public function delete_article($article)
{
article::where('id', $article)->delete();
return response()->json([
'success' => 'Record deleted successfully!'
]);
}
查看
<button class="deleteRecord" data-id="{{$article->id}}"><i class="icon-bin"></i>delete</button>
AJAX
$(".deleteRecord").click(function(){
var id = $(this).data("id");
var token = $("meta[name='csrf-token']").attr("content");
$.ajax({
url: "article/delete/"+id,
type: 'POST',
dataType: 'json',
data: {
_method: 'DELETE',
submit: true,
_token: token,
},
success: function (){
console.log("it Works");
}
});
});