Я пытаюсь удалить данные из базы данных через ajax.
HTML:
@foreach($a as $lis)
//some code
<a href="#" class="delteadd" id="{{$lis['id']}}">Delete</a>
//click action perform on this link
@endforeach
Мой код ajax:
$('body').on('click', '.delteadd', function (e) {
e.preventDefault();
//alert('am i here');
if (confirm('Are you sure you want to Delete Ad ?')) {
var id = $(this).attr('id');
$.ajax({
method: "POST",
url: "{{url()}}/delteadd",
}).done(function( msg ) {
if(msg.error == 0){
//$('.sucess-status-update').html(msg.message);
alert(msg.message);
}else{
alert(msg.message);
//$('.error-favourite-message').html(msg.message);
}
});
} else {
return false;
}
});
Это мой запрос на получение данных из базы данных ...
$a = Test::with('hitsCount')->where('userid', $id)->get()->toArray();
Но когда я нажимаю Удалить данные ссылки, не удаляются и показываю несоответствие csrf_token ...
Ответы:
Вы должны добавить данные в свой запрос ajax. Я надеюсь, что так будет работать.
источник
.js
файле?Лучший способ решить эту проблему «X-CSRF-TOKEN» - это добавить следующий код в ваш основной макет и продолжить обычные вызовы ajax:
В заголовке
В сценарии
источник
.js
файловДумаю, лучше поместить токен в форму, и получить этот токен по id
И JQUery:
таким образом, ваш JS не должен находиться в ваших файлах лезвия.
источник
Я только что добавил
headers:
в вызове ajax:ввиду:
функция ajax:
в контроллере:
в routes.php
источник
Если вы используете файлы шаблонов, вы можете поместить свой
meta
тег в заголовокsection
(или как вы его называете), который содержит вашиmeta
теги.Далее вам нужно поместить
headers
атрибут в свойajax
(в моем примере я используюdatatable
обработку на стороне сервера:Вот полный
datatable
пример ajax:После этого вы должны получить
200 status
по вашемуajax
запросу.источник
Знайте, что для удобства установлен файл cookie X-XSRF-TOKEN. Framework, как Angular и другие, устанавливают его по умолчанию. Проверьте это в документе https://laravel.com/docs/5.7/csrf#csrf-x-xsrf-token Возможно, вы захотите его использовать.
Лучше всего использовать мета, если файлы cookie отключены.
Вот рекомендуемый мета-способ (вы можете указать поле любым способом, но мета-вариант довольно приятный):
Обратите внимание на использование
decodeURIComponent()
, он декодируется из формата uri, который используется для хранения cookie. [иначе вы получите исключение недопустимой полезной нагрузки в laravel].Здесь раздел о файле cookie csrf в документе для проверки: https://laravel.com/docs/5.7/csrf#csrf-x-csrf-token
Также здесь, как laravel (bootstrap.js) по умолчанию устанавливает его для axios:
можешь пойти проверить
resources/js/bootstrap.js
.А вот и прочтите функцию cookie:
источник
Добавьте
id
кmeta
элементу, содержащему токенИ тогда вы можете получить его в своем Javascript
РЕДАКТИРОВАТЬ: более простой способ без изменения
meta
строки.Или
Спасибо @ martin-hartmann
источник
если вы используете jQuery для отправки сообщений AJAX, добавьте этот код во все представления:
Laravel добавляет файл cookie XSRF ко всем запросам, и мы автоматически добавляем его ко всем запросам AJAX непосредственно перед отправкой.
Вы можете заменить функцию getCookie, если есть другая функция или плагин jQuery, делающие то же самое.
источник
Для Laravel 5.8 установка метатега csrf для вашего макета и установка заголовка запроса для csrf в настройках ajax не будут работать, если вы используете ajax для отправки формы, которая уже включает
_token
поле ввода, сгенерированное механизмом создания шаблонов Laravel blade.Вы должны включить уже сгенерированный токен csrf из формы с вашим запросом ajax, потому что сервер будет ожидать его, а не тот, который указан в вашем метатеге.
Например, так выглядит
_token
поле ввода, созданное Blade:Затем вы отправляете свою форму с помощью ajax следующим образом:
Токен csrf в мета-заголовке полезен только тогда, когда вы отправляете форму без
_token
поля ввода, созданного Blade .источник
у кого-либо возникают проблемы с принятым ответом @Deepak saini, попробуйте удалить
для вызова ajax.
использовать
источник
У меня действительно была эта ошибка, и я не мог найти решение. На самом деле я закончил тем, что не выполнял запрос ajax. Я не знаю, была ли эта проблема связана с тем, что это поддомен на моем сервере или что-то еще. Вот мой jquery.
Поэтому я фактически установил привязку для перехода к моему API, а не для выполнения почтового запроса, что, как я полагаю, делает большинство приложений.
источник
Вы должны включить скрытое поле токена CSRF (подделка межсайтовых запросов) в форму, чтобы защита CSRF промежуточное ПО могло проверить запрос.
Laravel автоматически генерирует «токен» CSRF для каждой активной пользовательской сессии, управляемой приложением. Этот токен используется для проверки того, что аутентифицированный пользователь действительно отправляет запросы к приложению.
Поэтому при выполнении запросов ajax вам необходимо передать токен csrf через параметр данных. Вот пример кода.
источник
Я просто использую @csrf внутри формы, и он отлично работает
источник