Laravel ajax запрос с csrf - PullRequest
       85

Laravel ajax запрос с csrf

0 голосов
/ 28 марта 2020

Я использую Laravel 7.2.0, пытаюсь отправить запрос ajax, но у меня есть проблема.

Я пытаюсь передать токен csrf из мета, но он дает мне Ошибка 419.

Это работает, только если я добавлю @csrf в форму, как показано ниже, но контроллер не получит запрос ajax.

Форма:

<form id="formto" method="POST" action="{{ route('selectedtodolist') }}">
    @csrf
    <p>{{$Todo->name}}</p>
    <br>
    <input id="id_todolist" name="id_todolist" value="{{$Todo->id}}" type="hidden">
    <input type="submit">
</form>

Глава:

@push('head')
<!-- Scripts ajax -->
<script src=" {{ asset('js/components/Selectedtodolist.js') }} "></script>
<!-- JQuery -->
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>

<meta name="csrf-token" content="{{ csrf_token() }}" />
@endpush

Jquery ajax:

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

$(() => {


            $("#formto").submit((e) => {
                        let that = e.currentTarget;
                        e.preventDefault();

                        $.ajax({
                                type: $(this).attr('method'),
                                url: $(this).attr('action'),
                                data: $(this).serialize(),
                                dataType: 'json',
                                cache: false,
                                success: function() {
                                    alert("work");
                                }
                            })
                            .done((data) => {
                                console.log(data);
                            })

И контроллер: (дайте мне 404 причину ошибки этого «если»):

public function __invoke(Request $request)
{
    if ($request->ajax()) {

        $this->validate($request, [
           'id_todolist' => 'bail|required|email'
        ]);

        return response()->json ();
    }
    abort(404);
}

маршрут: Route::post('selectedtodolist', 'SelectedlistController')->name('selectedtodolist');

Заранее спасибо

...