Estoy tratando de eliminar datos de la base de datos a través de ajax.
HTML:
@foreach($a as $lis)
//some code
<a href="#" class="delteadd" id="{{$lis['id']}}">Delete</a>
//click action perform on this link
@endforeach
Mi código 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;
}
});
Esta es mi consulta para obtener datos de la base de datos ...
$a = Test::with('hitsCount')->where('userid', $id)->get()->toArray();
Pero cuando hago clic en Eliminar datos del enlace no eliminados y muestro csrf_token no coincide ...
Respuestas:
Tienes que agregar datos en tu solicitud ajax. Espero que funcione.
fuente
.js
archivo?La mejor manera de resolver este problema "X-CSRF-TOKEN" es agregar el siguiente código a su diseño principal y continuar haciendo sus llamadas ajax normalmente:
En el encabezado
En guion
fuente
.js
archivosCreo que es mejor poner el token en el formulario y obtener este token por id
Y el JQUery:
de esta manera, su JS no necesita estar en sus archivos blade.
fuente
Acabo de agregar
headers:
en una llamada ajax:en vista:
función ajax:
en controlador:
en rutas.php
fuente
Si está utilizando archivos de plantilla, puede poner su
meta
etiqueta en el encabezadosection
(o como lo llame) que contiene susmeta
etiquetas.A continuación, debe poner el
headers
atributo en suajax
(en mi ejemplo, estoy usandodatatable
con procesamiento del lado del servidor:Aquí está el
datatable
ejemplo completo de ajax:Después de hacer esto, debería obtener
200 status
suajax
solicitud.fuente
Sepa que hay una cookie X-XSRF-TOKEN que está configurada para su conveniencia. Framework como Angular y otros lo configuran de forma predeterminada. Verifique esto en el documento https://laravel.com/docs/5.7/csrf#csrf-x-xsrf-token Es posible que desee usarlo.
La mejor forma es utilizar el meta, en caso de que las cookies estén desactivadas.
Aquí la meta forma recomendada (puede poner el campo de cualquier manera, pero la meta es bastante agradable):
Tenga en cuenta el uso de
decodeURIComponent()
su decodificación del formato uri que se utiliza para almacenar la cookie. [de lo contrario, obtendrás una excepción de carga útil no válida en laravel].Aquí la sección sobre la cookie csrf en el documento para verificar: https://laravel.com/docs/5.7/csrf#csrf-x-csrf-token
También aquí cómo laravel (bootstrap.js) lo configura para axios de forma predeterminada:
puedes ir a comprobar
resources/js/bootstrap.js
.Y aquí lea la función de cookies:
fuente
Agregue un
id
almeta
elemento que contiene el tokenY luego puede obtenerlo en su Javascript
fuente
si está utilizando jQuery para enviar publicaciones AJAX, agregue este código a todas las vistas:
Laravel agrega una cookie XSRF a todas las solicitudes, y la agregamos automáticamente a todas las solicitudes AJAX justo antes de enviarla.
Puede reemplazar la función getCookie si hay otra función o complemento de jQuery para hacer lo mismo.
fuente
Para Laravel 5.8, configurar la metaetiqueta csrf para su diseño y configurar el encabezado de solicitud para csrf en la configuración de ajax no funcionará si está utilizando ajax para enviar un formulario que ya incluye un
_token
campo de entrada generado por el motor de plantillas de hoja de Laravel.Debe incluir el token csrf ya generado del formulario con su solicitud ajax porque el servidor lo estaría esperando y no el de su metaetiqueta.
Por ejemplo, así es como se ve el
_token
campo de entrada generado por Blade:Luego envía su formulario con ajax así:
El token csrf en el meta encabezado solo es útil cuando envía un formulario sin un
_token
campo de entrada generado por Blade .fuente
quien tenga problemas con la respuesta aceptada @Deepak saini, intente eliminar
para la llamada ajax.
utilizar
fuente
De hecho, tuve este error y no pude encontrar una solución. De hecho, terminé sin hacer una solicitud ajax. No sé si este problema se debe a que este es un subdominio en mi servidor o qué. Aquí está mi jquery.
Así que configuré un ancla para ir a mi API en lugar de hacer una solicitud de publicación, que es lo que supongo que hacen la mayoría de las aplicaciones.
fuente
Debe incluir un campo de token CSRF oculto (falsificación de solicitud entre sitios) en el formulario para que el middleware de protección CSRF pueda validar la solicitud.
Laravel genera automáticamente un "token" CSRF para cada sesión de usuario activa administrada por la aplicación. Este token se usa para verificar que el usuario autenticado es el que realmente hace las solicitudes a la aplicación.
Entonces, al hacer solicitudes ajax, deberá pasar el token csrf a través del parámetro de datos. Aquí está el código de muestra.
fuente
Solo uso @csrf dentro del formulario y funciona bien
fuente