2016-11-21 91 views
3

我發送ajax請求並在我的js/html應用程序中處理響應。該設備是Windows Mobile CE,沒有jQuery支持,設備瀏覽器(IE)不支持eventhandlers,所以我不能使用異步調用。無論如何,我的問題是,在發送活動之前,我想顯示一個,請等待消息,並在收到回覆後,我想再次隱藏它。發送ajax請求和接收響應(同步)

function sendRequest() { 
// make please wait visible 
document.getElementById("pleasewait").style.display = "block"; 
console.log("pleasewait visible."); 

var XHR = new XMLHttpRequest(); 
// synch call 

XHR.send(sendData); 

// suppose it takes 20-30 seconds 
console.log("response received :" + XHR.responseText); 

XHR.open('POST', 'url', false); 

// make please wait hidden 
document.getElementById("pleasewait").style.display = "none"; 
} 

但是,當我運行它時,PLEASEWAIT元素可見,當我們收到響應(不發),併成爲immediatelty再次隱藏,即使這個過程需要例如20-30秒。控制檯消息以正確的順序顯示,但請稍候元素沒有正確更新。我嘗試了一些setTimeouts,但沒有想要的結果。我無法添加一些jsfiddle,因爲很難在遠程實現ajax請求處理程序。

回答

1

瀏覽器將同步 AJAX請求時因此synchronous請求防止顯示再流凍結

唯一的解決方案,我會建議使用setTimeout0持續時間!

function sendRequest() { 
 
    document.getElementById("pleasewait").style.display = "block"; 
 
    setTimeout(function() { 
 
    var XHR = new XMLHttpRequest(); 
 
    XHR.send(sendData); 
 
    console.log("response received :" + XHR.responseText); 
 
    XHR.open('POST', 'url', false); 
 
    document.getElementById("pleasewait").style.display = "none"; 
 
    }, 0); 
 
}

注:Here是一些相關的信息!

+0

工作!謝謝! – benchpresser