我正在做一個ajax請求,它可能需要很多時間來處理server-end。所以我想在請求過程中顯示一個加載圖像。但是加載圖像不會在Ajax請求時顯示。
Ajax在處理請求時阻塞窗口嗎?
var ref = createAjaxRequest();//Ajax req is created here...
if(ref){
showLoadingImg();
ref.open('POST','x.jsp',false);
ref.onreadystatechange = eventStateChange;
ref.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ref.setRequestHeader("Connection", "keep-alive");
ref.send();
}
else{ alert("Your browser does not support this feature");
}
function eventStateChange(){
if(ref.readyState==4){
//processing response here......
hideLoadingImg();
}
}
function showLoadingImg();{
/* <div id="ajaxLoading">(with background image is in page)
It is displayed properly when I set display:inline
manually through developer tools of a browser.</div>
*/
document.getElementById('ajaxLoading').style.display='inline';
}
function hideLoadingImg();{
document.getElementById('ajaxLoading').style.display='none';
}
有什麼不對?
我試圖調試,發現:
雖然
showLoadingImg()
被調用之前open()
方法,加載圖像只ref.readyState==2
後顯示在瀏覽器中。但不幸的是,
readyState==2
和readyState==4
之間的時間差很小,加載圖像立即隱藏。
因此用戶無法看到加載圖像...
那麼,是什麼我懷疑是,不AJAX運行該腳本,除非它去readyState==2
。
createAjaxRequest中發生了什麼?是否有理由在創建請求之前無法顯示圖像,然後在出現錯誤(或完成後)時將其隱藏? – mjk