Laravel dosent 通过 ajax 删除记录?
Posted
技术标签:
【中文标题】Laravel dosent 通过 ajax 删除记录?【英文标题】:Laravel dosent delete record via ajax? 【发布时间】:2019-12-11 15:21:37 【问题描述】:我正在尝试使用 ajax 删除记录,在 laravel 5.4 中,我知道这是常见问题之一,并且已经有很多关于此主题的在线解决方案和教程。我尝试了其中一些,但大多数都给了我同样的错误 NetworkError: 405 Method Not Allowed。我试图从不同的角度完成这项任务,但我被卡住了,找不到我错的地方,这就是为什么我添加了这个问题作为指导。
我正在尝试使用以下脚本来删除记录。
输入路线:
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!'
]);
在视图中:
<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");
);
);
如您所见,似乎一切正常,但我不知道为什么它不能正常工作? 请帮帮我,伙计们。
【问题讨论】:
【参考方案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();
);
)
)
);
);
【讨论】:
【参考方案2】:问题(据我所知)出在此处:
<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();
【讨论】:
哈哈。嗨朋友。你有没有试过最后一部分:route
和ajax
。
MethodNotAllowedHttpException
你的 ajax 工作吗?我的意思是网址不应该改变。如果 url 发生变化,则 click 事件不起作用。
@ Rouhollah Mazarei 是的,一切都是正确的,但显示 http 异常。
您是在浏览器内部还是在开发者工具的network
选项卡中收到错误消息?【参考方案3】:
你在很多地方都做错了。试试这个
路线
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");
);
);
【讨论】:
你会根据我的回答改变一切吗? @zahid hasan emon 是的,我愿意 你仍然得到方法不允许的异常吗?以上是关于Laravel dosent 通过 ajax 删除记录?的主要内容,如果未能解决你的问题,请参考以下文章