@procode
Разработчик

Как вставить csrf-токен в Ajax-запрос (метод jQuery $.post())?

Здравствуйте.

При попытке отправить данные через метод $.post() в консоль выводится ошибка

POST 405 Method not allowed

я так понимаю что это связано с тем, что я не вставил в запрос csrf-токен?

А как это сделать?

Спасибо.

P.S. Вопрос немного раскрыт в документации: https://laravel.com/docs/5.8/csrf#csrf-x-csrf-token но там нет для метода $.post() да и потом приписка относительно "By default, the resources/js/bootstrap.js file registers the value of the csrf-token meta tag with the Axios HTTP library. If you are not using this library, you will need to manually configure this behavior for your application." - меня смущает)) Может есть какие-то совсем уж простые пути?
  • Вопрос задан
  • 4862 просмотра
Решения вопроса 1
@procode Автор вопроса
Разработчик
В общем, получилось вот такое (всё работает):

В HTML прописал в соответствии с доками ( https://laravel.com/docs/5.8/csrf#csrf-x-csrf-token )

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


А в скрипте это выглядит примерно так:

$.post({
		url: '/mypost',
		data: {'_token': $('meta[name="csrf-token"]').attr('content'), 'somefield': somevalue}
		}).done(function (data) {		
		alert('Успешно! ' + data);		
	});


и да, ВАЖНО:

в роутере должно быть прописано

Route::post( ......

если там, например,

Route::put( ....

- будет ошибка.

Хотя, может и можно заставить работать с PUT передав значение по аналогии с csrf-token, но мне уже вломы экспериментировать :D
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
crashxd
@crashxd
Backend разработчик
Я делаю вот так:
В главном layout'е в head добавляю
<meta name="csrf-token" content="{{ csrf_token() }}">

В футере добавляю
<script>
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });
</script>

Тем самым автоматом добавляя csrf токен ко всем будущим ajax запросам.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы