Estou tentando excluir dados do banco de dados 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
Meu 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 é minha consulta para buscar dados do banco de dados ...
$a = Test::with('hitsCount')->where('userid', $id)->get()->toArray();
Mas quando clico em Excluir dados de link não excluídos e mostro incompatibilidade csrf_token ...
Respostas:
Você deve adicionar dados em sua solicitação ajax. Espero que dê certo.
fonte
.js
arquivo?A melhor maneira de resolver este problema "X-CSRF-TOKEN" é adicionar o seguinte código ao seu layout principal e continuar fazendo suas chamadas ajax normalmente:
No cabeçalho
No script
fonte
.js
arquivosAcho melhor colocar o token no formulário, e pegar esse token por id
E o JQUery:
dessa forma, seu JS não precisa estar em seus arquivos blade.
fonte
Acabei de adicionar
headers:
na chamada ajax:em vista:
função ajax:
no controlador:
em routes.php
fonte
Se você estiver usando arquivos de modelo, então você pode colocar sua
meta
tag no cabeçalhosection
(ou qualquer que seja o nome) que contém suasmeta
tags.Em seguida, você precisa colocar o
headers
atributo em seuajax
(no meu exemplo, estou usandodatatable
com processamento do lado do servidor:Aqui está o
datatable
exemplo completo de Ajax:Depois de fazer isso, você deverá atender
200 status
ao seuajax
pedido.fonte
Saiba que existe um cookie X-XSRF-TOKEN configurado para sua conveniência. Framework como Angular e outros o definem por padrão. Verifique isso no documento https://laravel.com/docs/5.7/csrf#csrf-x-xsrf-token. Você pode gostar de usá-lo.
A melhor forma é usar o meta, caso os cookies estejam desativados.
Aqui está o método meta recomendado (você pode colocar o campo de qualquer maneira, mas o meta é muito bom):
Observe o uso de
decodeURIComponent()
, é decodificado do formato uri que é usado para armazenar o cookie. [caso contrário, você obterá uma exceção de carga útil inválida no laravel].Aqui está a seção sobre o cookie csrf no documento para verificar: https://laravel.com/docs/5.7/csrf#csrf-x-csrf-token
Também aqui como laravel (bootstrap.js) está configurando para axios por padrão:
você pode ir verificar
resources/js/bootstrap.js
.E aqui leia a função do cookie:
fonte
Adicione um
id
aometa
elemento que contém o tokenE então você pode obtê-lo em seu Javascript
fonte
se você estiver usando jQuery para enviar Postagens AJAX, adicione este código a todas as visualizações:
O Laravel adiciona um cookie XSRF a todas as solicitações, e nós o anexamos automaticamente a todas as solicitações AJAX antes de enviar.
Você pode substituir a função getCookie se houver outra função ou plugin jQuery para fazer a mesma coisa.
fonte
Para o Laravel 5.8, definir a meta tag csrf para o seu layout e definir o cabeçalho da solicitação para csrf nas configurações do ajax não funcionará se você estiver usando o ajax para enviar um formulário que já inclui um
_token
campo de entrada gerado pelo motor de templates do Laravel.Você deve incluir o token csrf já gerado do formulário com sua solicitação ajax porque o servidor estaria esperando por ele e não aquele em sua metatag.
Por exemplo, é assim que o
_token
campo de entrada gerado pelo Blade se parece:Em seguida, você envia seu formulário com ajax como este:
O token csrf no meta cabeçalho só é útil quando você está enviando um formulário sem um
_token
campo de entrada gerado pelo Blade .fonte
quem está tendo problemas com a resposta aceita @Deepak saini, tente remover
para chamada ajax.
usar
fonte
Na verdade, tive esse erro e não consegui encontrar uma solução. Na verdade, acabei não fazendo uma solicitação ajax. Não sei se este problema foi devido a ser um subdomínio no meu servidor ou o quê. Aqui está meu jquery.
Então, na verdade, configurei uma âncora para ir para minha API em vez de fazer uma solicitação de postagem, que é o que eu acho que a maioria dos aplicativos faz.
fonte
Você deve incluir um campo de token CSRF (falsificação de solicitação entre sites) oculto no formulário para que o middleware de proteção CSRF possa validar a solicitação.
O Laravel gera automaticamente um "token" CSRF para cada sessão de usuário ativa gerenciada pelo aplicativo. Esse token é usado para verificar se o usuário autenticado é quem realmente faz as solicitações ao aplicativo.
Portanto, ao fazer solicitações ajax, você precisará passar o token csrf por meio do parâmetro de dados. Aqui está o código de amostra.
fonte
Acabei de usar @csrf dentro do formulário e está funcionando bem
fonte