Подождите, пока Ajax отобразит (JSF) - PullRequest
0 голосов
/ 19 августа 2011

У меня есть диалоговое окно PRIMEFACES, в котором я использую атрибут onCloseUpdate для повторного рендеринга всего содержимого диалога, когда диалоговое окно закрыто. Проблема в том, что когда я закрываю диалоговое окно и (быстро) нажимаю, чтобы открыть его снова, я вижу, что onCloseUpdate не завершил повторную визуализацию содержимого диалогового окна, и старое содержимое отображается в течение полсекунды / секунды.

Вот командная ссылка, которая делает диалог видимым:

<h:commandLink id="area1" onclick="dlg.show()">
...
</h:commandLink>

, и вот диалог:

<ppctu:dialog onCloseUpdate="... here is all the component ids from the dialog content           ..."  modal="true" widgetVar="dlg">

Есть ли какой-нибудь способ дождаться завершения рендеринга onCloseUpdate?

Заранее спасибо

1 Ответ

0 голосов
/ 19 августа 2011

Использовать синхронный вызов ajax. Синхронный AJAX (на самом деле SJAX - синхронный Javascript и XML) является модальным, что означает, что javascript прекратит обработку вашей программы, пока не будет получен результат с сервера.Во время обработки запроса браузер фактически блокируется.

function getFile(url) {
  if (window.XMLHttpRequest) {              
    AJAX=new XMLHttpRequest();              
  } else {                                  
    AJAX=new ActiveXObject("Microsoft.XMLHTTP");
  }
  if (AJAX) {
     AJAX.open("GET", url, false); //notice the 'false' attribute                           
     AJAX.send(null);
     return AJAX.responseText;                                         
  } else {
     return false;
  }                                             
}

Если вы используете jQuery, то укажите async:false в вызове ajax var fileFromServer = getFile ('http://somedomain.com/somefile.txt');

...