onbeforeunload ждать результата ajax - PullRequest
1 голос
/ 15 марта 2011

Возможно ли для функции onbeforeunload() дождаться результата ajax и перейти к jsp на основе значения результата или, по крайней мере, показать сообщение перед выгрузкой?

Возможно ли использовать setTimeOut или некоторую пользовательскую функцию ожидания для этой проблемы, или мне нужно подумать о каком-то другом рабочем процессе

Ответы [ 4 ]

3 голосов
/ 15 марта 2011

Использовать синхронный вызов XmlHttpRequest ("AJAX" - неправильный номер).

0 голосов
/ 19 ноября 2014

Это моя стратегия, и она работает для меня:

_number_of_active_ajax ++;
$.ajax({
    url: REQUEST_URL,
    timeout: 3000
})
.always(function() {
    _number_of_active_ajax --;
});

window.onbeforeunload = function() {
    if(_number_of_active_debounce > 0 || _number_of_active_ajax > 0)
        return "Your question";
}

}

Будет отображено сообщение, которое будет использоваться, если на странице есть активный запрос.

0 голосов
/ 18 марта 2011

Это не очень хорошая идея, чтобы отобразить окно предупреждения для ожидания ответа от AJAX. Как правило, вы можете использовать окно оповещения для сообщения о подтверждении ухода с страницы после ответа ajax.

Во избежание использования оповещения вы можете синхронно вызывать Ajax, например

if(window.XMLHttpRequest) xmlHttpObj=new XMLHttpRequest();
else xmlHttpObj=new ActiveXObject("Microsoft.XMLHTTP");
if(xmlHttpObj){
xmlHttpObj.onreadystatechange=function(){
if(xmlHttpObj.readyState==4 && xmlHttpObj.status == 200){
 // your logic required
}
}
xmlHttpObj.open("GET", "your request url", false); // used false for synchronous call 
xmlHttpObj.send(null);
}
else{
alert("AJAX not support");
}    
0 голосов
/ 15 марта 2011

AFAIK, это невозможно.onbeforeunload имеет очень ограниченную функциональность, в противном случае вредоносные сайты могут помешать вам покинуть свой сайт.

Приложение: можно показать сообщение типа «Вы покидаете эту страницу».В этом случае функция beforeunload() должна возвращать строку.

Пример

window.onbeforeunload = function() {
   return 'Are you sure about that?';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...