Как получить браузер обновить до того, как называется следующая функция JavaScript?
-
25-09-2019 - |
Вопрос
У меня есть немного неприятностей, получая нужную функциональность от моей функции ... в основном я делаю два звонка на функции AJAX (как предоставлено Oracle Apex, поэтому я не могу изменить их), но они принимают пока. Я хотел бы показать стандартную спиннинг AJAXY, а действие продолжалось, но мне не повезло. Вот что у меня сейчас:
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;
}
Конкретная проблема, у меня на данный момент, заключается в том, что блокировка пользовательского интерфейса кажется только после завершения вызовов AJAX. Тогда это никогда не разблокирует ... любые идеи?
Решение
Оберните свой ajax в другом методе и задержать этот метод на 1 мс
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);
}
Другие советы
Предполагая, что звонки async
- Можете ли вы пройти обратный вызов в функцию отчетов AJAX или использовать другую функцию или постоянную, чтобы установить обратный вызов? В противном случае вам придется опросить на ответ - как вы сделаете, это будет зависеть от того, что возвращено из $a_report
и / или API за их функциональностью Ajax.
Если они не async
Тогда это может быть опечатка или что-то. Как показывает другой постер $.blockUI;
вероятно, должно быть $.blockUI();