我有一個客戶端服務器應用程序。服務器端完全在java中。客戶端有幾行html,其餘部分以純javascript(我不使用ajax或jquery等)。XmlHttpRequest不報告服務器端進度
客戶端通過輸入框接收用戶輸入,當用戶單擊按鈕時,客戶端使用XmlHtpRequest向服務器發送POST請求。然後服務器運行一個可能需要幾分鐘的過程。服務器週期性地(每5秒)發送一個帶有HTTP狀態代碼202並且內容爲「處理...完成5/100」的進度更新消息。數字5和100是一個樣本。它不是100,而是實際的最終計數器,而不是5,它是指示進度的當前計數器。當服務器完成處理後,它發送一個200 OK,並以最終輸出作爲內容。我有一個輸出文本區域,我希望在處理期間顯示進度消息,稍後最終輸出也會放在同一個輸出文本區域中。
我的客戶端的JavaScript代碼是:
<script>
var xhr = new XmlHttpRequest();
function sendCommandToServer() {
window.xhr.onreadystatechange = getServerResponse;
window.xhr.open("POST", (document.domain + "/" + "executeCommand"), true);
window.xhr.send("arguments and data for the command");
}
</script>
<script>
function getServerResponse() {
if(window.xhr.status === 202) {
myTextArea.value = window.xhr.responseText;
window.xhr.onreadystatechange = getServerResponse;
return;
}
if(window.xhr.status === 200) {
myTextArea.value = window.xhr.responseText;
return;
}
alert("processing error");
}
</script>
服務器正確地獲取命令,並運行所述過程和完成和產生輸出。它也正確地發送進度消息。但我的客戶端JavaScript並沒有得到所有這些。我能夠從服務器獲得第一個進度消息 - 例如 - 「Processing .... 5/100」 - 但之後,我無法獲得進一步的調用getServerResponse()以繼續更新進度服務器發送消息。如果我修改服務器端以避免發送進度並僅發送最終輸出結果,它將正常工作,並且我會在客戶端顯示最終的輸出結果。我在IE10和Chrome上運行這個,具有相同的行爲。這個用例可以使用xmlHttpRequest()嗎?難道我做錯了什麼?任何幫助將不勝感激。謝謝。
Morvael - 我剛纔看到這個反應形成你,所以我想我會添加什麼,我終於做到了。在嘗試爲命令和進度獲取相同的xmlHttpRequest()後掙扎(失敗)後,我創建了2個單獨的XmlHttpRequests()。第一個人發佈命令並等待最終響應,而第二個人定期輪詢服務器的進度。 – user3925450 2014-11-14 11:21:15