我知道有几个关于使用AJAX删除错误的帖子。但是,我发现的帖子中没有任何解决方案为我工作。Laravel Ajax删除:405错误 - 不允许的方法
我有一个表格显示我的数据库的机床表中的所有机器。在每一行有一个删除按钮来删除机器,像这样:
<button class="btn btn-small btn-danger delete-machine"
type="button"
title="Delete Machine"
machine-id="{{ $value->machineId }}">
<span class="glyphicon glyphicon-trash"></span>
</button>
上按一下按钮,下面的JavaScript执行这就要求在控制器中的破坏方法从数据库中删除机器:
$(document).on('click', ".delete-machine", function() {
let button = $(this);
let id = $(this).attr('machine-id');
let tr = $(this).closest('tr');
let didConfirm = confirm("Are you sure you want to permanently delete this machine?");
if (didConfirm) {
$.ajax({
type: 'DELETE',
url: 'machines/' + id,
data: {
'_token' : $('input[name="_token"]').val(),
'id' : id
},
success: function(response) {
if (response.didSucceed) {
tr.remove();
let flashMessage = '<div class="alert alert-success alert-block"><button type="button" class="close" data-dismiss="alert">×</button><strong>'
+ response.message +
'</strong></div>';
$('#flash-message').append(flashMessage);
} else {
let flashMessage = '<div class="alert alert-error alert-block"><button type="button" class="close" data-dismiss="alert">×</button><strong>'
+ response.message +
'</strong></div>';
$('#flash-message').append(flashMessage);
}
},
error: function (response) {
console.log('Error:', response);
}
});
}
});
我的控制器是资源控制器。这里是路线:
Route::resource('machines', 'Machine\MachineController');
这是被调用的控制器的销毁方法。它首先从用户订阅表中删除引用机器的所有行。然后,它会删除本机:
public function destroy($id)
{
$userMachineSubscriptions = UserMachineSubscription::where('machine_id', $id)->get();
foreach($userMachineSubscriptions as $userMachineSubscription) {
$userMachineSubscription->delete();
}
$userMachineSubscriptions = UserMachineSubscription::where('machine_id', $id)->count();
if ($userMachineSubscriptions <= 0) {
$machine = Machine::find($id);
if ($machine->delete()) {
$message = 'Machine "' . $machine['name'] . '" successfully deleted!';
return response()->json(['didSucceed' => 'true', 'message' => $message]);
} else {
$message = 'Machine "' . $machine['name'] . '" was not deleted.';
return response()->json(['didSucceed' => 'false', 'message' => $message]);
}
} else {
$message = 'Error performing cascading delete on user subscriptions. Machine was not deleted.';
return response()->json(['didSucceed' => 'false', 'message' => $message]);
}
}
当我运行PHP的工匠路线:列表中,我看到我的路线:
Method: DELETE
URI: machines/{machine}
Middleware: web, auth
Name: machines.destroy
Action: App\Http\Controllers\Machine\[email protected]
我在做什么错?使用Laravel 5.4。
...
此外,在一个侧面说明,我是新来的网络发展中,如果有人看到任何东西在我的代码,可好歹得到改善,我很开放地学习:)比如,我有点不喜欢我成功显示闪光消息的方法。我这样做了几个Ajax请求,并希望我可以做会话::闪存或其他东西,而不是将HTML附加到我的主刀片布局中的div。但是,我似乎无法找到一个更好的方式来做到这一点。
UDPATE:已解决。只需要清除路由缓存。 :(
我更新我的职务。我做 – JonTan
哦,我的,我想路由缓存是问题....清除我的路由缓存,它开始工作。 不能相信我花了这么多的时间在这个...: ( – JonTan