Como faço para que o navegador seja atualizado antes que minha próxima função JavaScript seja chamada?
-
25-09-2019 - |
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?
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();