Php 尝试在laravel 8中使用ajax删除mysql数据记录时出现500内部服务器错误
所以我的朋友和我正在为用户管理开发一个管理视图。我希望此视图能够通过单击按钮删除用户 用户列表本身如下所示:Php 尝试在laravel 8中使用ajax删除mysql数据记录时出现500内部服务器错误,php,mysql,ajax,laravel,laravel-8,Php,Mysql,Ajax,Laravel,Laravel 8,所以我的朋友和我正在为用户管理开发一个管理视图。我希望此视图能够通过单击按钮删除用户 用户列表本身如下所示: @节('main') @csrf @foreach($users作为$user) 面{{$user->fname}{{$user->lname} 地址:{{$user->address1}},{{$user->postalcode}}{{$user->city} 土地:{{$user->country} 电子邮件:{{$user->email} Beigetreten:{{$user
@节('main')
@csrf
@foreach($users作为$user)
-
面{{$user->fname}{{$user->lname}
地址:{{$user->address1}},{{$user->postalcode}}{{$user->city}
土地:{{$user->country}
电子邮件:{{$user->email}
Beigetreten:{{$user->created_at}
@endforeach
@端部
extended dashboard.blade.php模板中的脚本如下所示:
<script>
$(document).ready(function(){
$('.collapsible').collapsible();
$('.user-delete-button').click(function (e){
$.ajax({
url: '{{route('deleteuser')}}',
data: {"userid": $(this).data("userid")},
type: 'post',
success: function(data)
{
console.log('deleted');
}
});
});
});
</script>
最后是web.php中的路径:
Route::post('/deleteuser', [UserController::class, 'destroy'])->name('deleteuser');
Route::post('/deleteuser', [UserController::class, 'destroy'])->name('deleteuser');
因此,现在每当我试图删除一个点击按钮的用户时,控制台中就会出现一个“500内部服务器错误”
在这一点上,我不仅仅是不知道我应该做些什么来使这项工作。
我唯一想做的就是删除一条记录并通过单击一个按钮刷新数据库。但目前为止,我试过的方法都不管用
我希望你能帮助我。提前谢谢 可能是因为找不到控制器类,所以出现了500个错误。您需要使用完整的命名空间。按如下方式修改您的代码: 路线:
Route::post('/deleteuser', [App\Http\Controllers\UserController::class, 'destroy'])->name('deleteuser');
控制器:
class UserController extends Controller
{
public static function destroy($id) {
$user = \App\Models\User::findOrFail($id);
$user->delete();
return redirect('/userlist');
}
//
}
class UserController extends Controller
{
public static function destroy(Request $Request) {
$id = $Request->input('userid');
$user = \App\Models\User::findOrFail($id);
$user->delete();
return redirect('/userlist');
}
}
注意:对于POST
请求,您需要通过ajax数据发送csrf令牌
data: {
"_token": "{{ csrf_token() }}",
"userid": $(this).data("userid")
}
或者您可以这样添加标题参数:
$.ajax({
url: '{{route('deleteuser')}}',
data: {"userid": $(this).data("userid")},
type: 'post',
headers: {'X-CSRF-TOKEN': '{{ csrf_token() }}' },
success: function(data)
{
console.log('deleted');
}
});
希望这能奏效 选项1:向路由添加{id}参数。
Route::post('/deleteuser/{userid}',[UserController::class,'destroy'])->name('deleteuser');
选项2:在路由和控制器操作中使用路由模型绑定:
选项3:使用请求对象检索查询字符串
您的请求中必须包含头文件,因此请使用此
类型:'post',
header转到您的存储>日志文件夹并告诉我们错误。我认为函数不应该是静态的,您应该将id添加到路由/deleteuser/{id}
此外,查看控制台的网络选项卡中返回的响应以查看错误的详细信息。您能澄清一下吗?$.ajax({type:'post',headers:{'X-CSRF-TOKEN':$('meta[name=“CSRF TOKEN”]').attr('content')},url:{{route(“delete_all_document”)},数据:{type:type,pId:pId},成功:函数(数据){window.location.reload();}}});像这样,您可以在ajx调用@patzabawa中添加headr,如果csrf不匹配,那么它将抛出419错误,而不是500I建议所有这些,因为他也缺少csrf。@sta
Route::post('/deleteuser/{user}', [UserController::class, 'destroy'])->name('deleteuser');
use App\Models\User;
class UserController extends Controller
{
public function destroy(User $user) {
$user->delete();
return redirect('/userlist');
}
}
Route::post('/deleteuser', [UserController::class, 'destroy'])->name('deleteuser');
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function destroy(Request $request) {
$user = User::findOrFail($request->query('userid', null));
$user->delete();
return redirect('/userlist');
}
}