我正在使用Laravel 5,我需要销毁数据库中的数据,我有以下代码
HTML
<div class="modal fade" id="deletePub" tabindex="-1" role="dialog" aria-labelledby="exampleModalLongTitle" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h6 class="modal-title" id="modalPublicationTitle">Confirm Publication Delete</h6>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<div class="row align-items-center">
<div class="col-lg-12" align="center">Really, do you want to delete this publication?</div>
<a href="#" id="btn-confirmDeletePub" class="btn btn-danger btn-sm" role="button">Yes, Delete</a>
</div>
</div>
</div>
</div>
</div>
JS
$(document).ready(function(){
$("#btn-confirmDeletePub").click(function(){
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
var publicationId = window.location.href.split("/")[4]
console.log(publicationId);
$.ajax({
type: "DELETE",
url: "/publications/" + publicationId,
data: JSON.stringify(publicationId),
contentType: "application/json; charset=utf-8",
dataType: "json",
});
});
});
web.php
Route::resource('publications','PublicationController);
PublicationController.php
public function destroy($id)
{
$publication = Publication::find($id);
$publication->users()->detach($publication->id);
$publication->topics()->detach($publication->id);
$publication->authors()->detach($publication->id);
$publication->details()->delete();
//$publication->delete();
Redirect('/users')->with('success', 'Publication deleted correctly.');
}
单击btn-confirmDeletePub
按钮时,以下所有代码都应调用JS文件的Yes, delete
函数。 JS按钮捕获要删除的发布的id,并将发送到destroy($id)
的{{1}}函数,但由于某种原因,此函数未被调用,错误在JS内部,我'当然,但我不知道如何解决。
在Google Chrome控制台中,我收到以下错误:
PublicationController
答案 0 :(得分:1)
如果要使用delete方法,必须将方法字段添加到ajax调用并将类型设置为post。 正如jQuery文档所说的类型选项:“也可以使用其他HTTP请求方法,如PUT和DELETE,但并非所有浏览器都支持它们。
但是,如果您真的想这样做,Symfony应该针对任何请求处理此问题,将其视为一种形式:
当您从表单发送删除请求时,您应将method属性设置为post并在表单中添加$.ajax({
url: route,
type: 'post',
data: {_method: 'delete'},
success: function....
。在ajax中你必须这样做,除非你将方法字段作为数据传递:
<form action="route" method="post">
{{csrf_filed()}}
{{method_filed('DELETE')}}
</form>
详细说明:
当您从表单发送删除请求时,您的表单应如下所示:
{{1}}
当您按下提交按钮时,laravel会查看名称为“_method”的表单输入,并将请求与路由方法和URL匹配。
因此,如果您想通过ajax发送请求,则必须按照现在的方式执行,除非您必须在使用ajax发送的数据中添加方法字段。