Ich versuche, Daten über Ajax aus der Datenbank zu löschen.
HTML:
@foreach($a as $lis)
//some code
<a href="#" class="delteadd" id="{{$lis['id']}}">Delete</a>
//click action perform on this link
@endforeach
Mein Ajax-Code:
$('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;
}
});
Dies ist meine Abfrage zum Abrufen von Daten aus der Datenbank ...
$a = Test::with('hitsCount')->where('userid', $id)->get()->toArray();
Aber wenn ich auf Linkdaten löschen lösche nicht gelöscht und zeige csrf_token Mismatch ...
Antworten:
Sie müssen Ihrer Ajax-Anfrage Daten hinzufügen . Ich hoffe es wird Arbeit.
quelle
.js
Datei befindet?Der beste Weg, um dieses Problem "X-CSRF-TOKEN" zu lösen, besteht darin, Ihrem Hauptlayout den folgenden Code hinzuzufügen und Ihre Ajax-Anrufe normal fortzusetzen:
Im Header
Im Skript
quelle
.js
Dateien verwenden könnenIch denke, es ist besser, das Token in das Formular zu setzen und dieses Token per ID zu erhalten
Und die JQUery:
Auf diese Weise muss sich Ihr JS nicht in Ihren Blade-Dateien befinden.
quelle
Ich habe gerade
headers:
in Ajax Call hinzugefügt :im Hinblick auf:
Ajax-Funktion:
im Controller:
in route.php
quelle
Wenn Sie Vorlagendateien verwenden, können Sie Ihr
meta
Tag in den Kopfsection
(oder wie auch immer Sie es nennen) einfügen, der Ihremeta
Tags enthält.Als nächstes müssen Sie das
headers
Attribut in Ihr Verzeichnis einfügenajax
(in meinem Beispiel verwende ich esdatatable
mit der serverseitigen Verarbeitung:Hier ist das vollständige
datatable
Ajax-Beispiel:Danach sollten Sie
200 status
für Ihreajax
Anfrage erhalten.quelle
Wissen Sie, dass es ein X-XSRF-TOKEN-Cookie gibt, das der Einfachheit halber gesetzt ist. Framework wie Angular und andere legen es standardmäßig fest. Überprüfen Sie dies im Dokument https://laravel.com/docs/5.7/csrf#csrf-x-xsrf-token. Möglicherweise möchten Sie es verwenden.
Der beste Weg ist, das Meta zu verwenden, falls die Cookies deaktiviert sind.
Hier der empfohlene Meta-Weg (Sie können das Feld beliebig platzieren, aber Meta ist ziemlich nett):
Beachten Sie die Verwendung von
decodeURIComponent()
, es wird aus dem Uri-Format dekodiert, das zum Speichern des Cookies verwendet wird. [Andernfalls erhalten Sie eine ungültige Nutzlastausnahme in Laravel].Hier ist der Abschnitt über das CSRF-Cookie im Dokument zu überprüfen: https://laravel.com/docs/5.7/csrf#csrf-x-csrf-token
Auch hier, wie Laravel (bootstrap.js) es standardmäßig für Axios einstellt:
Sie können überprüfen gehen
resources/js/bootstrap.js
.Und hier lesen Sie die Cookie-Funktion:
quelle
Fügen Sie
id
demmeta
Element, das das Token enthält, ein hinzuUnd dann können Sie es in Ihrem Javascript bekommen
quelle
Wenn Sie jQuery zum Senden von AJAX-Posts verwenden, fügen Sie diesen Code allen Ansichten hinzu:
Laravel fügt allen Anfragen ein XSRF-Cookie hinzu, das wir automatisch an alle AJAX-Anfragen anhängen, bevor diese gesendet werden.
Sie können die getCookie-Funktion ersetzen, wenn eine andere Funktion oder ein anderes jQuery-Plugin vorhanden ist, um dasselbe zu tun.
quelle
In Laravel 5.8 funktioniert das Festlegen des csrf-Meta-Tags für Ihr Layout und das Festlegen des Anforderungsheaders für csrf in den Ajax-Einstellungen nicht, wenn Sie mit ajax ein Formular senden, das bereits ein
_token
Eingabefeld enthält, das bereits von der Laravel Blade-Template-Engine generiert wurde.Sie müssen das bereits generierte csrf-Token aus dem Formular in Ihre Ajax-Anfrage aufnehmen, da der Server dies erwarten würde und nicht das in Ihrem Meta-Tag.
So
_token
sieht beispielsweise das von Blade generierte Eingabefeld aus:Anschließend senden Sie Ihr Formular mit Ajax wie folgt:
Das csrf-Token im Meta-Header ist nur nützlich, wenn Sie ein Formular ohne ein von Blade generiertes
_token
Eingabefeld senden .quelle
Wer immer ein Problem mit der akzeptierten Antwort @Deepak saini bekommt, versucht zu entfernen
für Ajax Anruf.
verwenden
quelle
Ich hatte tatsächlich diesen Fehler und konnte keine Lösung finden. Am Ende habe ich keine Ajax-Anfrage gestellt. Ich weiß nicht, ob dieses Problem darauf zurückzuführen ist, dass es sich um eine Subdomain auf meinem Server handelt oder was. Hier ist meine Frage.
Also habe ich tatsächlich einen Anker eingerichtet, um zu meiner API zu gelangen, anstatt eine Post-Anfrage zu stellen, was meiner Meinung nach die meisten Anwendungen tun.
quelle
Sie sollten ein ausgeblendetes CSRF-Token-Feld (Cross Site Request Forgery) in das Formular aufnehmen, damit die CSRF-Schutz- Middleware die Anforderung validieren kann.
Laravel generiert automatisch ein CSRF- "Token" für jede aktive Benutzersitzung, die von der Anwendung verwaltet wird. Dieses Token wird verwendet, um zu überprüfen, ob der authentifizierte Benutzer tatsächlich die Anforderungen an die Anwendung stellt.
Wenn Sie Ajax- Anforderungen ausführen , müssen Sie das CSRF-Token über den Datenparameter übergeben. Hier ist der Beispielcode.
quelle
Ich benutze nur @csrf innerhalb des Formulars und es funktioniert gut
quelle