500 Внутренняя ошибка сервера при попытке удалить запись данных mysql с помощью ajax в laravel 8


500 Внутренняя ошибка сервера при попытке удалить запись данных mysql с помощью ajax в laravel 8

26.09.2020 09:00:12 Просмотров 38 Источник

Итак, мы с моим другом работаем над представлением администратора для управления пользователями. Я хотел, чтобы это представление могло удалять пользователей, нажав на кнопку.

Сам список пользователей выглядит следующим образом:

@section('main')
    @csrf
    <ul class="collapsible">
        @foreach($users as $user)
            <li method="POST" action="delete">
                <div class="collapsible-header">
                    <i class="material-icons">face</i>{{$user->fname}} {{$user->lname}}
                </div>
                <div class="collapsible-body" id="{{$user->id}}">
                    <p>Adresse: {{$user->address1}}, {{$user->postalcode}} {{$user->city}}</p>
                    <p>Land: {{$user->country}}</p>
                    <p>E-Mail: {{$user->email}}</p>
                    <span>Beigetreten: {{$user->created_at}}</span>
                    <br>
                    <a class="btn red waves-effect waves-light user-delete-button" href="" 
                       id="user-delete-button" data-userid="{{$user->id}}">
                        <i class="material-icons">delete</i>
                    </a>
                </div>
            </li>
        @endforeach
    </ul>
@endsection

Сценарий в расширенном варианте 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>

UserController:

class UserController extends Controller
{
    public static function destroy($id) {
        $user = \App\Models\User::findOrFail($id);
        $user->delete();

        return redirect('/userlist');
    }
    //
}

И, наконец, маршрут в web.php:

Route::post('/deleteuser', [UserController::class, 'destroy'])->name('deleteuser');

Поэтому теперь всякий раз, когда я пытаюсь удалить пользователя, нажав на кнопку, я получаю "500 внутренних ошибок сервера" в консоли.

На данный момент я больше, чем просто не знаю, что я должен сделать, чтобы это сработало. Единственное, что я хочу, это удалить запись и обновить базу данных, просто нажав на кнопку. Но в настоящее время ничего из того, что я пробовал, пока не работало.

Надеюсь, вы мне поможете. Заранее спасибо!

У вопроса есть решение - Посмотреть?

Ответы - 500 Внутренняя ошибка сервера при попытке удалить запись данных mysql с помощью ajax в laravel 8 / 500 Internal Server Error when trying to delete mysql data record using ajax in laravel 8

Tuhin

26.09.2020 09:13:54

Возможно, вы получили ошибку 500, потому что ваш класс контроллера не был найден. Вам нужно использовать полное пространство имен. Измените свой код следующим образом:

Маршрут:

Route::post('/deleteuser', [App\Http\Controllers\UserController::class, 'destroy'])->name('deleteuser');

Контроллер:

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

N. B: для запроса POST вам необходимо отправить csrf token через ваши данные ajax

data: {
   "_token": "{{ csrf_token() }}",
   "userid": $(this).data("userid")
}

или вы можете добавить заголовок parmas следующим образом:

$.ajax({
    url: '{{route('deleteuser')}}',
    data: {"userid": $(this).data("userid")},
    type: 'post',
    headers: {'X-CSRF-TOKEN': '{{ csrf_token() }}' },
    success: function(data)
    {
        console.log('deleted');
    }
});

Надеюсь, это сработает!

IGP

26.09.2020 09:29:59

Вариант 1: добавьте параметр {id} к вашему маршруту.

Route::post('/deleteuser/{userid}', [UserController::class, 'destroy'])->name('deleteuser');
use App\Models\User;

class UserController extends Controller
{
    public function destroy($userid) {
        $user = User::findOrFail($userid);
        $user->delete();

        return redirect('/userlist');
    }
    
}

Вариант 2: Используйте привязку модели маршрута в своем действии маршрута и контроллера:

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

Вариант 3: Используйте объект запроса для извлечения строки запроса

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

26.09.2020 09:51:24

ваш должен нуждаться в заголовочном файле в вашем запросе, поэтому используйте этот тип:'post', header

Помочь в развитии проекта:
Закрыть X