Laravel Ajax 使用按钮删除记录
Posted
技术标签:
【中文标题】Laravel Ajax 使用按钮删除记录【英文标题】:Laravel Ajax delete record with button 【发布时间】:2019-04-12 21:47:51 【问题描述】:我不明白为什么它不起作用:
路线
Route::delete('/dashboard/booking/deletebooking/id','ResourceController@deletebooking')->name('works.deletebooking');
资源控制器
public function deletebooking($id)
$booking = Booking::where('id','=',$id)->get();
$booking->delete();
return response()->json(['success' => true],200);
表格
<tr id="$booking->id">
<td class="roomId">$booking->room_id</td>
<td class="roomName">$booking->name</td>
<td class="roomLocation">$booking->sede</td>
<td class="start">$booking->start_date</td>
<td class="end">$booking->end_date</td>
<td>
<input type="hidden" name="_method" value="delete" />
<button class="btn btn-danger btn-xs" id="destroy" data-id="$booking->id" data-token=" csrf_token() ">
<span class="glyphicon glyphicon-trash"></span>
</button>
</td>
</tr>
请求 Ajax
$(".btn").click(function()
var id = $(this).data('id');
// var $tr = $(this).closest('tr');
$.ajax(
url: "/dashboard/booking/deletebooking/"+id,
dataType: "JSON",
type: 'POST',
data:
'_token': $('meta[name=csrf-token]').attr("content"),
'_method': 'DELETE',
"id": id
,
success: function ()
console.log("it Work");
);
console.log("It failed");
);
我有这个错误:
请求网址:http://pickbooking.local/dashboard/booking/deletebooking/1 请求方法:POST 状态码:500 内部服务器错误 远程地址:192.168.10.10:80
【问题讨论】:
你用的是什么浏览器? 【参考方案1】:问题在于用于 ajax 调用的方法post
// var $tr = $(this).closest('tr');
$.ajax(
url: "/dashboard/booking/deletebooking/"+id,
dataType: "JSON",
type: 'POST',
data:
'_token': $('meta[name=csrf-token]').attr("content"),
'_method': 'DELETE',
"id": id
,
success: function ()
console.log("it Work");
);
数据将在请求的正文中发送,而在 DELETE 请求中,没有正文。所以 laravel 不会看到 _method
或 _token
。您可以在 GET 请求中发送它们并让 _method
完成它的工作(它将在 url 中,而不是在正文中),或者在 ajax 调用中使用 DELETE
方法
// var $tr = $(this).closest('tr');
$.ajax(
url: "/dashboard/booking/deletebooking/"+id,
dataType: "JSON",
type: 'DELETE',
data:
'_token': $('meta[name=csrf-token]').attr("content"),
,
success: function ()
console.log("it Work");
);
【讨论】:
我按照你的建议使用了 ajax 请求,但我有同样的错误 你试过GET method
吗?正如@Fil 所注意到的,使用->first();
而不是->get()
【参考方案2】:
因为我认为你有类似的错误
方法 Illuminate\Database\Eloquent\Collection::delete 不存在。
不如试试这样的
$booking = Booking::where('id', '=', $id)->first();
$booking->delete();
这样$booking
可以有方法delete()
【讨论】:
以上是关于Laravel Ajax 使用按钮删除记录的主要内容,如果未能解决你的问题,请参考以下文章