[英]DELETE not working in the Laravel Datatable
我正在使用 Laravel Datatable,但我遇到了一点。 下面的代码用于删除 TagManagement 模型中的条目。 但它不会删除条目,更糟糕的是它没有显示任何错误。 有人能在下面的代码中找到错误吗?
看法
$(document.body).on("click",".remove-tag", function () {
var tag_id = $(this).data('id');
showConfirm("DELETE", "Do you want to delete this Tag ?","deleteTag("+tag_id+")");
});
function deleteTag(id){
$.ajax({
type: 'get',
url: '{!! url('delete-tag') !!}',
data: {tag_id: id},
success: function (data) {
if (data == "SUCCESS") {
$('[data-id="' + id + '"]').closest('tr').remove();
showAlert("SUCCESS","Delete Tag successful");
}
}, error: function (data) {
showAlert("FAIL","Delete Tag fail");
}
});
}
var tag_id = $(this).data('id');
showConfirm("DELETE", "Do you want to delete this Tag ?","deleteTag("+tag_id+")");
});
function deleteTag(id){
$.ajax({
type: 'get',
url: '{!! url('delete-tag') !!}',
data: {tag_id: id},
success: function (data) {
if (data == "SUCCESS") {
$('[data-id="' + id + '"]').closest('tr').remove();
showAlert("SUCCESS","Delete Tag successful");
}
}, error: function (data) {
showAlert("FAIL","Delete Tag fail");
}
});
}
控制器
public function destroy($id)
{
$tagManagement = TagManagement::find($id);
$deleted = $tagManagement->delete();
if ($deleted) {
return "SUCCESS";
} else {
return "FAIL";
}
}
public function loadTags()
{
$Tags = TagManagement::all();
return DataTables::of($Tags)
->addColumn('action', function ($tag) {
return '<a href="' . url('/tags/' . $tag->id . '/edit') . '" class="btn btn-default edit_btn_styles" data-toggle="tooltip" data-placement="top" title="Edit"><i class="fa fa-wrench" aria-hidden="true"></i></a>
<button type="button" data-id="' . $tag->id . '" class="btn btn-default remove-tag remove-btn" data-toggle="tooltip" data-placement="top" title="Delete"><i class="fas fa-trash-alt" aria-hidden="true"></i></button>';
})
->rawColumns(['action'])
->make(true);
}
}
**Route**
Route::get('/delete-tag', 'AdminPanel\\TagController@destroy');
您的路由和控制器方法似乎不对应。 首先,最好使用“删除”HTTP 请求方法进行删除操作,但这不是导致您出现问题的原因。
您将路由定义为/delete-tag
但在您的控制器中,您希望$id
作为您的destroy
方法的参数。 为了让它工作,你需要有这样的路由/delete-tag/{id}
并在前端相应地为你的 ajax 调用构建 URL。 我很惊讶你没有得到Missing argument 1 for App\\Providers\\RouteServiceProvider::{closure}()
异常的Missing argument 1 for App\\Providers\\RouteServiceProvider::{closure}()
这种方式使你的请求畸形。
Laravel 文档很好地解释了如何使用参数定义路由。
如果您在问题中包含 Laravel 版本会有所帮助。
这是它应该如何工作:
路线定义
Route::delete('/delete-tag/{id}', 'AdminPanel\TagController@destroy')->name('delete-tag');
JS函数
function deleteTag(id){
let route = '{!! route('delete-tag', ['id' => '%id%']) !!}';
$.ajax({
type: 'post',
url: route.replace('%id%', id);,
data: {_method: 'delete'},
success: function (data) {
if (data == "SUCCESS") {
$('[data-id="' + id + '"]').closest('tr').remove();
showAlert("SUCCESS","Delete Tag successful");
}
}, error: function (data) {
showAlert("FAIL","Delete Tag fail");
}
});
}
这不是你的数据表问题,你错过了一些代码,你没有正确定义route
和jQuery function
,你的destroy($id)
函数收到了一个参数,但你的route
没有收到任何参数,你没有在你的 ajax 中发送_token
您需要发送_token
检查我的代码我编辑了你的代码。
//Change your Route
Route::get('delete-tag/{id}', 'AdminPanel\TagController@destroy')->name('deleteTag');
//Change your function
function deleteTag(id){
$.ajax({
type: "GET",
dataType: 'JSON',
url:'{{ route('deleteTag', '') }}/'+id,
data: {_token: '{{csrf_token()}}'},
success: function (data) {
if (data == "SUCCESS") {
$('[data-id="' + id + '"]').closest('tr').remove();
showAlert("SUCCESS","Delete Tag successful");
}
}, error: function (data) {
showAlert("FAIL","Delete Tag fail");
}
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.