Saya mencoba menghapus data dari database melalui ajax.
HTML:
@foreach($a as $lis)
//some code
<a href="#" class="delteadd" id="{{$lis['id']}}">Delete</a>
//click action perform on this link
@endforeach
Kode ajax saya:
$('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;
}
});
Ini adalah permintaan saya untuk mengambil data dari database ...
$a = Test::with('hitsCount')->where('userid', $id)->get()->toArray();
Tetapi ketika saya mengklik Hapus data tautan tidak dihapus dan menunjukkan ketidakcocokan csrf_token ...
Jawaban:
Anda harus menambahkan data dalam permintaan ajax Anda. Saya berharap ini akan berhasil.
sumber
.js
file?Cara terbaik untuk mengatasi masalah ini "X-CSRF-TOKEN" adalah dengan menambahkan kode berikut ke layout utama Anda, dan terus melakukan panggilan ajax seperti biasa:
Di header
Dalam naskah
sumber
.js
fileSaya pikir lebih baik letakkan token di formulir, dan dapatkan token ini dengan id
Dan JQUery:
dengan cara ini, JS Anda tidak perlu ada di file blade Anda.
sumber
Saya baru saja menambahkan
headers:
dalam panggilan ajax:dalam penglihatan:
fungsi ajax:
dalam pengontrol:
di routes.php
sumber
Jika Anda menggunakan file template, Anda dapat meletakkan
meta
tag Anda di headsection
(atau apa pun namanya) yang berisimeta
tag Anda .Hal berikutnya, Anda perlu meletakkan
headers
atribut ke Andaajax
(dalam contoh saya, saya menggunakandatatable
dengan pemrosesan sisi server:Berikut
datatable
contoh lengkap ajax:Setelah melakukan ini, Anda harus mendapatkan permintaan
200 status
Andaajax
.sumber
Ketahuilah bahwa ada cookie X-XSRF-TOKEN yang diatur untuk kenyamanan. Kerangka kerja seperti Angular dan lainnya mengaturnya secara default. Periksa ini di dokumen https://laravel.com/docs/5.7/csrf#csrf-x-xsrf-token Anda mungkin ingin menggunakannya.
Cara terbaik adalah menggunakan meta, jika cookie dinonaktifkan.
Berikut cara meta yang disarankan (Anda dapat meletakkan bidang dengan cara apa pun, tetapi meta cukup bagus):
Catat penggunaannya
decodeURIComponent()
, ini diterjemahkan dari format uri yang digunakan untuk menyimpan cookie. [jika tidak, Anda akan mendapatkan pengecualian muatan yang tidak valid di laravel].Di sini bagian tentang cookie csrf di dokumen untuk diperiksa: https://laravel.com/docs/5.7/csrf#csrf-x-csrf-token
Juga di sini bagaimana laravel (bootstrap.js) mengaturnya untuk axios secara default:
kamu bisa pergi memeriksanya
resources/js/bootstrap.js
.Dan di sini membaca fungsi cookie:
sumber
Tambahkan
id
kemeta
elemen yang menyimpan tokenDan kemudian Anda bisa mendapatkannya di Javascript Anda
EDIT: Cara yang lebih mudah tanpa mengubah
meta
garis.Atau
Terima kasih kepada @ martin-hartmann
sumber
jika Anda menggunakan jQuery untuk mengirim Postingan AJAX, tambahkan kode ini ke semua tampilan:
Laravel menambahkan cookie XSRF ke semua permintaan, dan kami secara otomatis menambahkannya ke semua permintaan AJAX sebelum mengirim.
Anda bisa mengganti fungsi getCookie jika ada fungsi lain atau plugin jQuery untuk melakukan hal yang sama.
sumber
Untuk Laravel 5.8, mengatur tag meta csrf untuk layout Anda dan mengatur header permintaan untuk csrf dalam pengaturan ajax tidak akan berfungsi jika Anda menggunakan ajax untuk mengirimkan formulir yang sudah menyertakan
_token
kolom masukan yang dihasilkan oleh mesin template blade Laravel.Anda harus menyertakan token csrf yang sudah dibuat dari formulir dengan permintaan ajax Anda karena server akan mengharapkannya dan bukan yang ada di tag meta Anda.
Misalnya, seperti inilah kolom
_token
input yang dihasilkan oleh Blade:Anda kemudian mengirimkan formulir Anda dengan ajax seperti ini:
Token csrf di header meta hanya berguna saat Anda mengirimkan formulir tanpa
_token
bidang masukan yang dibuat oleh Blade .sumber
yang bermasalah dengan jawaban diterima @Deepak saini, coba hapus
untuk panggilan ajax.
menggunakan
sumber
Saya sebenarnya mengalami kesalahan ini dan tidak dapat menemukan solusi. Saya sebenarnya akhirnya tidak melakukan permintaan ajax. Saya tidak tahu apakah masalah ini disebabkan oleh sub-domain ini di server saya atau apa. Ini jquery saya.
Jadi saya sebenarnya menyiapkan jangkar untuk masuk ke API saya daripada melakukan permintaan posting, yang menurut saya sebagian besar aplikasi lakukan.
sumber
Anda harus menyertakan bidang token CSRF (permintaan pemalsuan lintas situs) yang tersembunyi dalam formulir sehingga middleware perlindungan CSRF dapat memvalidasi permintaan tersebut.
Laravel secara otomatis menghasilkan "token" CSRF untuk setiap sesi pengguna aktif yang dikelola oleh aplikasi. Token ini digunakan untuk memverifikasi bahwa pengguna yang diautentikasi adalah yang benar-benar membuat permintaan ke aplikasi.
Jadi saat melakukan permintaan ajax, Anda harus meneruskan token csrf melalui parameter data. Berikut kode contoh.
sumber
Saya hanya menggunakan @csrf di dalam formulir dan berfungsi dengan baik
sumber