Problemas com retorno AJAX(LARAVEL)

10 respostas Resolvido
php5.3ajaxprogramaçãolaravel
E
`<script type="text/javascript">
    $(document).ready(function(){
        $('#btn_busca_f').click(function () {
            var data_ini = $('#data_ini').val();
            var data_fim = $('#data_fim').val();
            var cod_recurso = $('#cod_recurso').val();
            var cod_funcionario = $('#cod_funcionario').val();
            var num_op = $('#num_op').val();
            $.ajax({
                type: 'post',
                async: false,
                url: '/intranet/ExportaFimApontamento',
                data:{
                    '_token': '{{csrf_token()}}',
                    'data_ini': data_ini, 
                    'data_fim': data_fim, 
                    'cod_recurso': cod_recurso,
                    'cod_funcionario': cod_funcionario,
                    'num_op': num_op
                },
                erro: function () {
                    alert('erro');
                },
                success: function (data) {
                    return (data);
                    alert('Excel Gerado com Sucesso!');
                }
            });
        });
    });
</script>`

este script executa uma função no controller onde ele gera um arquivo excel.xls, porem se eu executar a função direto no controler(sem passar pela pagina) ele funciona, se eu executar com o script(ai em cima) ele funciona mas nao gera o arquivo.xls, ele gera o preview e o response pelo F12 navegador mas nao baixa o excel. alguem sabe como posso fazer para que ele baixe o arquivo ao executar o script?

10 Respostas

J

Qual necessidade real de usar ajax pro usuário baixar um arquivo? Eu pelo menos nunca precisei.

E

necessidade nenhuma, só preciso gerar o arquivo. de alguma forma preciso gerar o arquivo.

J

Segue um exemplo pra ilustrar:

<form action="/caminho/exportar" method="post">
  <input type="hidden" name="parametro1" value="?">
  <input type="hidden" name="parametro2" value="?">
  <button onclick="document.body.onbeforeunload = null" target="_blank">Download</button>
</form>
E

uam forma era usar isso na view dos dados… acho que vai ser a solução. um form hide para download

J

Foi só um exemplo, pode ser hidden assim como diretamente o input text do seu form.

E

sim entendi seu exemplo… voce acha que ficaria ruim fazer um form ou um input hiden e gerar apartir disso ?

J

Se tiver a necessidade de fazer isso, pode fazer. Só não precisa caso os inputs do filtro já estiverem no form usado pelo usuário.

E

vou ter que fazer… porque carrego os dados em uma tabela dinâmica, que o usuário pode manipular. em outra tela. entao vou precisar enviar as variáveis para a view, para gerar o download posteriormente.

J
Solucao aceita

Então segue em frente nisso.

Só um detalhe, copiei e colei mas não precisa dessa parte do código:

onclick="document.body.onbeforeunload = null"

Exemplo mais limpo:

<form action="/caminho/exportar" method="post">
  <input type="text" name="parametro1" value="?">
  <input type="hidden" name="parametro2" value="?">
  <button target="_blank">Download</button>
</form>
E

Valeu pela ajuda…

Criado 13 de março de 2019
Ultima resposta 13 de mar. de 2019
Respostas 10
Participantes 2