Проблема с отображением индикатора выполнения с использованием оверлея - PullRequest
1 голос
/ 21 декабря 2009

Требование : У меня есть кусок кода, похожий на код ниже. Я хочу показать индикатор выполнения в оверлее после нажатия кнопки сохранения. Как только я получаю ответ от вызова ajax, я показываю предупреждение, показывающее, что операция прошла успешно.

Проблема : оверлей (индикатор выполнения) виден только после того, как мы получили ответ от вызова AJAX, и мы отображаем предупреждение. Он не виден во время обработки вызова ajax.

Я что-то не так делаю или это ожидаемое поведение? Я использую чистый JavaScript. Я не могу использовать какую-либо внешнюю библиотеку для этого.

<script>
  function save(){
      document.getElementById('overlaydiv').style.display = 'block';
      document.getElementById('progressBarDiv ').style.display = 'block';
      var URL = 'some url';
      ajaxFunction(URL, false);
  }
  function ajaxFunction(URL, isAsynchronousCall){
      var xmlHttp;
      var callTypeFlag = true; // is an Asynchronous Call
      if(isAsynchronousCall != null){
         callTypeFlag = isAsynchronousCall;
      }
      try{
          if (window.XMLHttpRequest) {
            xmlHttp = new XMLHttpRequest();
          } else if (window.ActiveXObject) {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
          }
      }catch (e){
         alert("Your browser does not support AJAX!");
         return false;
      }
      xmlHttp.open("GET", URL, callTypeFlag);
      xmlHttp.onreadystatechange = function(){responseProcessor(xmlHttp)};
      xmlHttp.send(null);
   }
   function responseProcessor(xmlHttp){
    //If the readystate is 4 then check for the request status.
      if (xmlHttp.readyState == 4) {
        if (xmlHttp.status == 200) {
            alert('Settings saved successfully');
            window.close();
            opener.location.href='new URL';
         }
       }
   }
</script>

<div id="overlaydiv" style="display:none"/>  
<div id="progressBarDiv" style="display:none">
  <img border="0" src="progressBar.gif"/>
</div>
<div>
 <table>
   <tr>
     <td>
       <input type="button" onclick="save()"/>
     </td>
   </tr>
 </table>
</div>

Ответы [ 2 ]

2 голосов
/ 21 декабря 2009

Поставьте небольшую задержку при вызове ajaxFunction ()

function save(){
      document.getElementById('overlaydiv').style.display = 'block';
      document.getElementById('progressBarDiv ').style.display = 'block';

      setTimeout(ajaxFunction, 50);//5,10,20,30,40 will do
}
0 голосов
/ 21 декабря 2009

Кажется, проблема была в том, что я использовал синхронный вызов ajax. Я изменил вызов на асинхронный, и теперь нет проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...