Aya*_*hah 11 php ajax laravel laravel-5
我正在尝试使用laravel 5.3中的ajax删除记录,我知道这是一个常见的问题,并且已经有很多关于此主题的在线解决方案和教程.我尝试了其中一些,但大多数给了我同样的错误NetworkError: 405 Method Not Allowed.我尝试以不同的角度完成这项任务,但我陷入困境,无法找到我错的地方,这就是为什么我将这个问题添加到指南中.
我正在尝试使用脚本来删除记录.
Controller.php这样
public function destroy($id)
{ //For Deleting Users
$Users = new UserModel;
$Users = UserModel::find($id);
$Users->delete($id);
return response()->json([
'success' => 'Record has been deleted successfully!'
]);
}
Run Code Online (Sandbox Code Playgroud)
routes.php文件
Route::get('/user/delete/{id}', 'UserController@destroy');
Run Code Online (Sandbox Code Playgroud)
在视图中
<button class="deleteProduct" data-id="{{ $user->id }}" data-token="{{ csrf_token() }}" >Delete Task</button>
Run Code Online (Sandbox Code Playgroud)
App.js
$(".deleteProduct").click(function(){
var id = $(this).data("id");
var token = $(this).data("token");
$.ajax(
{
url: "user/delete/"+id,
type: 'PUT',
dataType: "JSON",
data: {
"id": id,
"_method": 'DELETE',
"_token": token,
},
success: function ()
{
console.log("it Work");
}
});
console.log("It failed");
});
Run Code Online (Sandbox Code Playgroud)
当我点击删除按钮时,它NetworkError: 405 Method Not Allowed在控制台中返回错误.没有ajax相同的删除功能正常工作.
任何人都可以指导我,我错了,我可以解决这个问题,我想感谢有人指导我这个.谢谢..
sia*_*one 18
而不是Route::get使用Route::delete.
除了更改ajax调用中的type: 'Put'to之外type: 'DELETE'.
PS这段代码
$Users = new UserModel; // Totally useless line
$Users = UserModel::find($id); // Can chain this line with the next one
$Users->delete($id);
Run Code Online (Sandbox Code Playgroud)
可以写成:
UserModel::find($id)->delete();
Run Code Online (Sandbox Code Playgroud)
甚至更短:
UserModel::destroy($id);
Run Code Online (Sandbox Code Playgroud)
请记住,这->delete()将触发事件而::destroy()不会.
Kou*_*Das 14
确保将此meta添加到您的视图标签中
<meta name="csrf-token" content="{{ csrf_token() }}">
Run Code Online (Sandbox Code Playgroud)
在您的Routes, 执行此操作
Route::delete('/user/delete/{id}', 'UserController@destroy');
Run Code Online (Sandbox Code Playgroud)
在您的控制器中,执行此操作
UserModel::destroy($id);
Run Code Online (Sandbox Code Playgroud)
或者
DB::table('table_name')->where('id', $id)->delete();
Run Code Online (Sandbox Code Playgroud)
确保检查删除帐户的用户实际上拥有该帐户,即运行授权测试。
由于这是一个delete请求,因此您需要csrf_token按照官方网站的说明将与 ajax 标头一起发送。
https://laravel.com/docs/5.5/csrf#csrf-x-csrf-token
确保在 ajax 调用之前添加
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
Run Code Online (Sandbox Code Playgroud)
现在发送请求
$(".deleteProduct").click(function(){
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax(
{
url: "user/delete/"+id,
type: 'delete', // replaced from put
dataType: "JSON",
data: {
"id": id // method and token not needed in data
},
success: function (response)
{
console.log(response); // see the reponse sent
},
error: function(xhr) {
console.log(xhr.responseText); // this line will save you tons of hours while debugging
// do something here because of error
}
});
});
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助。
| 归档时间: |
|
| 查看次数: |
25606 次 |
| 最近记录: |