J'essaye de supprimer les données de la base de données via ajax.
HTML:
@foreach($a as $lis)
//some code
<a href="#" class="delteadd" id="{{$lis['id']}}">Delete</a>
//click action perform on this link
@endforeach
Mon code 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;
}
});
Ceci est ma requête pour récupérer les données de la base de données ...
$a = Test::with('hitsCount')->where('userid', $id)->get()->toArray();
Mais lorsque je clique sur Supprimer les données du lien non supprimées et que je montre une discordance csrf_token ...
Réponses:
Vous devez ajouter des données dans votre requête ajax. J'espère que ce sera du travail.
la source
.js
fichier?La meilleure façon de résoudre ce problème "X-CSRF-TOKEN" est d'ajouter le code suivant à votre mise en page principale et de continuer à faire vos appels ajax normalement:
Dans l'en-tête
Dans le script
la source
.js
fichiersJe pense qu'il vaut mieux mettre le jeton dans le formulaire et obtenir ce jeton par id
Et le JQUery:
de cette façon, votre JS n'a pas besoin d'être dans vos fichiers de lame.
la source
Je viens d'ajouter
headers:
dans l'appel ajax:en vue:
fonction ajax:
dans le contrôleur:
dans routes.php
la source
Si vous utilisez des fichiers modèles, vous pouvez mettre votre
meta
balise dans la têtesection
(ou quel que soit votre nom) qui contient vosmeta
balises.Ensuite, vous devez mettre l'
headers
attribut à votreajax
(dans mon exemple, j'utilisedatatable
avec le traitement côté serveur:Voici l'
datatable
exemple complet d' ajax:Après avoir fait cela, vous devriez obtenir
200 status
votreajax
demande.la source
Sachez qu'il existe un cookie X-XSRF-TOKEN qui est défini pour plus de commodité. Des frameworks comme Angular et d'autres le définissent par défaut. Vérifiez cela dans le doc https://laravel.com/docs/5.7/csrf#csrf-x-xsrf-token Vous aimerez peut-être l'utiliser.
Le meilleur moyen est d'utiliser la méta, au cas où les cookies seraient désactivés.
Voici la méthode méta recommandée (vous pouvez mettre le champ de toute façon, mais la méta est plutôt sympa):
Notez l'utilisation de
decodeURIComponent()
, il est décodé à partir du format uri qui est utilisé pour stocker le cookie. [sinon vous obtiendrez une exception de charge utile invalide dans laravel].Voici la section sur le cookie csrf dans la doc à vérifier: https://laravel.com/docs/5.7/csrf#csrf-x-csrf-token
Voici également comment laravel (bootstrap.js) le définit par défaut pour axios:
vous pouvez aller vérifier
resources/js/bootstrap.js
.Et ici, lisez la fonction de cookie:
la source
Ajouter un
id
à l'meta
élément contenant le jetonEt puis vous pouvez l'obtenir dans votre Javascript
la source
si vous utilisez jQuery pour envoyer des publications AJAX, ajoutez ce code à toutes les vues:
Laravel ajoute un cookie XSRF à toutes les demandes, et nous l'ajoutons automatiquement à toutes les demandes AJAX juste avant de les soumettre.
Vous pouvez remplacer la fonction getCookie s'il existe une autre fonction ou un autre plugin jQuery pour faire la même chose.
la source
Pour Laravel 5.8, définir la balise meta csrf pour votre mise en page et définir l'en-tête de demande pour csrf dans les paramètres ajax ne fonctionnera pas si vous utilisez ajax pour soumettre un formulaire qui comprend déjà un
_token
champ d'entrée généré par le moteur de création de modèles de lames Laravel.Vous devez inclure le jeton csrf déjà généré à partir du formulaire avec votre requête ajax car le serveur l'attend et non celui de votre balise meta.
Par exemple, voici à quoi
_token
ressemble le champ de saisie généré par Blade:Vous soumettez ensuite votre formulaire avec ajax comme ceci:
Le jeton csrf dans l'en-tête méta n'est utile que lorsque vous soumettez un formulaire sans
_token
champ de saisie généré par Blade .la source
qui a un problème avec la réponse acceptée @Deepak saini, essayez de supprimer
pour un appel ajax.
utilisation
la source
J'ai effectivement eu cette erreur et je n'ai pas pu trouver de solution. En fait, j'ai fini par ne pas faire de requête ajax. Je ne sais pas si ce problème était dû au fait qu'il s'agissait d'un sous-domaine sur mon serveur ou quoi. Voici ma question.
J'ai donc mis en place une ancre pour accéder à mon API plutôt que de faire une demande de publication, ce que je pense que la plupart des applications font.
la source
Vous devez inclure un champ de jeton caché CSRF (contrefaçon de requête intersite) dans le formulaire afin que le middleware de protection CSRF puisse valider la demande.
Laravel génère automatiquement un "token" CSRF pour chaque session utilisateur active gérée par l'application. Ce jeton est utilisé pour vérifier que l'utilisateur authentifié est celui qui fait réellement les requêtes à l'application.
Ainsi, lorsque vous effectuez des requêtes ajax, vous devrez transmettre le jeton csrf via le paramètre data. Voici l'exemple de code.
la source
J'utilise juste @csrf dans le formulaire et cela fonctionne bien
la source