Ajax does not receive controller response

Asked

Viewed 336 times

1

PHP

public function salvar_distrito(Request $request)
{
    $distritos=Distrito::create($request->all());
    if ($distritos) {
        $messagem = 'Adicionado com Sucesso!';
        echo true;
    }
    // Se houver algum erro ao inserir
    else {
        echo "Não foi possível inserir a mensagem no momento.";
    }

Javascript

<script>
    $(function(){
        // Executa assim que o botão de salvar for clicado
        $('#guardar').click(function(e){
            e.preventDefault();
            // Pega os valores dos inputs e coloca nas variáveis
            var nome = $('#nome').val();
            var provincia_id = $('#provincia_id').val();

            // Método post do Jquery
            $.post('salvar.distrito', {
                nome:nome,
                provincia_id:provincia_id,

            }, function(data){
                // Valida a resposta

                if(data == 1){
                    // Limpa os inputs
                    $('input, textarea').val('');
                    alert('Mensagem enviada com sucesso.');
                }else {
                    alert(resposta);
                }
            });
            return false;
        });

    });
</script>

1 answer

1

In the Laravel so you can send something via post you need to put in the form o @csrf, and when sending using ajax you need to specify it in headers, you can do it this way:

$.ajax({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    },
    type: 'post',
    url: url,
    async: true,
    data: { nome : nome, provincia_id: provincia_id },
    success: function (data) {
        //Dados que chegaram do seu servidor
    }
});

Obs: this url is its route, but not separated by points as in the Laravel, but the url as shown in the browser.

An example using your code, make sure the route is correct.

<script>
    $(function(){
        // Executa assim que o botão de salvar for clicado
        $('#guardar').click(function(e){
            e.preventDefault();
            // Pega os valores dos inputs e coloca nas variáveis
            var nome = $('#nome').val();
            var provincia_id = $('#provincia_id').val();

            $.ajax({
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                },
                type: 'post',
                url: 'salvar/distrito/',//Acredito que esta seja a sua rota, ela deve ser a mesma que aparece no navegador
                async: true,
                data: { nome : nome, provincia_id: provincia_id },
                success: function (data) {
                    // Valida a resposta
                    if(data == 1){
                        // Limpa os inputs
                        $('input, textarea').val('');
                        alert('Mensagem enviada com sucesso.');
                    }else {
                        alert(resposta);
                    }
                }
            });

            return false;
        });

    });
</script>
  • I tested, but the result was the same. I do not receive the answer in Json.

  • you tested your url outside of ajax?

  • Yes I tested and write the data without problems. Even with ajax, the data is recorded in the database, but it does not alert me via json.

  • But where does the variable 'answer' come from, because in this code it has no reference anywhere.

  • It should be 'date'.

  • depends, date is the json that your php code returned, so given this all that php brought to you.

  • If you returned from your php for example 'saved data', if you put Alert(data), it will be shown in the 'saved data' Alert'.

Show 2 more comments

Browser other questions tagged

You are not signed in. Login or sign up in order to post.