Como faço para que o navegador seja atualizado antes que minha próxima função JavaScript seja chamada?

StackOverflow https://stackoverflow.com/questions/2185587

Pergunta

Estou tendo alguns problemas para obter a funcionalidade desejada da minha função ... Basicamente, estou fazendo duas chamadas para as funções do Ajax (conforme fornecido pelo Oracle Apex, para que não possa mudar isso), mas eles estão tomando um enquanto. Eu gostaria de mostrar o GIF de giro padrão de Ajaxy enquanto a ação estava acontecendo, mas não estou tendo muita sorte. Aqui está o que tenho até agora:

function paginate(reportIDs, startRecord)
{
 //block access to the UI and show a "please wait" message
  $.blockUI({ css: { 
            border: 'none', 
            padding: '15px', 
            backgroundColor: '#000', 
            '-webkit-border-radius': '10px', 
            '-moz-border-radius': '10px', 
            opacity: .5, 
            color: '#fff' 
        } });

  //make the two AJAX calls to the APEX provided function
  for(var i = 0;i<reportIDs.length;i++)
  {
    $a_report(reportIDs[i], startRecord, ITEMS_PER_PAGE, ITEMS_PER_PAGE);
  }

  //clean up some APEX garbage on the page
  formatPage();

  //make the "please wait" message go away
  $.unblockUI;
}

O problema específico que estou tendo no momento é que o bloqueio da interface do usuário parece acontecer apenas quando as chamadas do Ajax estiverem concluídas. Então nunca desbloqueia ... alguma idéia?

Foi útil?

Solução

Enrole seu Ajax em outro método e atrase esse método em 1 ms

function paginate(reportIDs, startRecord)
{
    //block access to the UI and show a "please wait" message
    $.blockUI({ css: { 
            border: 'none', 
            padding: '15px', 
            backgroundColor: '#000', 
            '-webkit-border-radius': '10px', 
            '-moz-border-radius': '10px', 
            opacity: .5, 
            color: '#fff' 
        }
    });
    setTimeout(function(){
        //make the two AJAX calls to the APEX provided function
        for(var i = 0;i<reportIDs.length;i++)
        {
            $a_report(reportIDs[i], startRecord, ITEMS_PER_PAGE, ITEMS_PER_PAGE);
        }

        //clean up some APEX garbage on the page
        formatPage();

        //make the "please wait" message go away
        $.unblockUI();
   }, 1);
}

Outras dicas

Assumindo que as chamadas são async - Você pode passar um retorno de chamada para a função de relatório do Ajax ou usar outra função ou constante para definir um retorno de chamada? Caso contrário, você terá que pesquisar a resposta - como você faria isso dependerá do que devolveu $a_report e/ou a API por trás de sua funcionalidade Ajax.

Se eles não forem async Então pode ser um erro de digitação ou algo assim. Como o outro pôster sugere $.blockUI; provavelmente deveria ser $.blockUI();

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top