Ir para conteúdo
Fórum Script Brasil
  • 0

Abrir arquivo PDF bloqueando botão via AJAX


Thraloc

Pergunta

Olá,

Podem me ajudar com o seguinte problema?

Eu tenho um formulário onde seleciono os parâmetros para a geração de um relatório PDF que vai ser retornado por uma action do Struts 1.X que vai ser aberto pelo navegador. Isto está funcionando perfeitamente de forma síncrona no sistema.

Mas o que eu preciso, para proteger o sistema de o usuário ficar requisitando o relatório toda hora sem ter terminado, seria colocar um bloqueio no botão para que fosse somente habilitado assim que o relatório fosse gerado.

A minha opção foi criar uma função em AJAX (chamada assíncrona) para que este relatório fosse gerado e enquanto este processo não me retorna resposta eu escondo o botão e mostro o "loading" e assim que tiver o retorno eu mostro o botão e escondo o "loading".

Mas estou tendo problemas diferentes nas duas tentativas:

Na primeira tentativa (código 1) com jQuery o comportamento do botão e do loading são os esperados mas o meu arquivo PDF que retorna no function(data) abaixo não abre na janela de download do navegador:

...
success : function(data) {
            var WinId = window.open('', 'newwin', 'width=400,height=500');
            WinId.document.open();
            WinId.document.write(data);
            WinId.document.close();    
...
Na segunda tentativa (código 2) usando Dojo o retorno do arquivo PDF é o esperado mas quando a janela de download do navegador é aberta perco o controle para poder habilitar novamente o botão e desabilitar a imagem de loading. Existe alguma forma de abrir este arquivo PDF usando jQuery ou controlar minhas DIVs no Dojo? Obrigado, Fragmento HTML:
...
<tr>
    <td colspan="3" align="center" valign="middle">
        <div id="button">
            <a href="java script:execute();"> 
                <img src="images/btnExecute.png" alt="Execute" border="0" class="inputImage" /> 
            </a>
        </div>
        <div id="loadingImage">
            <img src='images/loading.gif' style="{align:right;}" />
        </div>
    </td>
</tr>
...
Código 1 (jQuery):
function execute()
{
    $.ajax({
        type:"GET",
        url: "generateReport.do",
        data: "action=print¶m1=param1",
        dataType: "html",
        beforeSend : function() {
            //It works
            $('#button').hide();
            $('#loadingImage').show();
        },
        complete : function() {
            $('#button').show();
            $('#loadingImage').hide();
        },
        success : function(data) {
            var WinId = window.open('', 'newwin', 'width=400,height=500');
            WinId.document.open();
            WinId.document.write(data);
            WinId.document.close();    
        }
    });    
}
Código 2 (Dojo):
function execute()
{    
    //It works
    $('#button').hide();
    $('#loadingImage').show();

    var url = "generateReport.do?action=print¶m1=param1";              

    require(["dojo/io/iframe"], function(ioIframe){
        ioIframe.send({
            url: url,
            handleAs: "html"
        }).then(function(data){
            //It only works when my page returns the html message "Empty report"
            $('#button').show();
            $('#loadingImage').hide();
        }, function(err){
        });
    });    
}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...