Как заставить браузер обновиться до того, как будет вызвана моя следующая функция Javascript? - PullRequest
0 голосов
/ 02 февраля 2010

У меня возникли некоторые проблемы с получением желаемой функциональности из моей функции ... По сути, я делаю два вызова функций AJAX (как предусмотрено Oracle APEX, поэтому я не могу их изменить), но они ' требуется время. Я бы хотел показать стандартный вращающийся GIF-файл 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. Тогда он никогда не разблокируется ... Есть идеи?

Ответы [ 2 ]

2 голосов
/ 02 февраля 2010

Оберните ваш 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);
}
0 голосов
/ 02 февраля 2010

Предполагая, что вызовы async - можете ли вы передать обратный вызов в функцию отчета ajax или использовать другую функцию или константу для установки обратного вызова?В противном случае вам придется запросить ответ - как вы это сделаете, будет зависеть от того, что возвращается из $a_report и / или API, стоящих за их функциональностью ajax.

Если они не async, то это может быть опечатка или что-то в этом роде.Как предполагает другой участник, $.blockUI; должно быть $.blockUI();

...