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');
    }
    
}