Jump to content
Fórum Script Brasil
  • 0

Abrir arquivo PDF bloqueando botão via AJAX


Thraloc

Question

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 to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...