2011-03-15 103 views
1

onbeforeunload()函數可能等待ajax結果並根據結果值移動到jsp或至少在卸載之前顯示消息?onbeforeunload等待ajax結果

是否有可能使用的setTimeout或一些自定義等待功能對於這個問題,或者我要考慮一些其他的工作流程

+0

也許與同步調用 – mplungjan 2011-03-15 10:37:05

回答

0

據我所知,那是不可能的。 onbeforeunload的功能非常有限,否則惡意網站可能會阻止您離開其網站。

附錄:可能會顯示一條消息,如'您要離開本頁面'。在這種情況下,beforeunload()函數必須返回一個字符串。

window.onbeforeunload = function() { 
    return 'Are you sure about that?'; 
} 
+0

實際上,該消息包含ajax結果的一些內容。無論如何,我認爲這個工作流程不好,我將使用redirectAction並使用其他一些技巧顯示消息 – anu 2011-03-15 10:54:54

0

這是不好的想法顯示警報框等待來自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

這是我的策略和對我的作品:

_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"; 
} 

}

它會顯示一個消息如果頁面具有活動請求,請使用此選項。