Как получить браузер обновить до того, как называется следующая функция JavaScript?

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

Вопрос

У меня есть немного неприятностей, получая нужную функциональность от моей функции ... в основном я делаю два звонка на функции 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();

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top