我有一个客户端服务器应用程序。服务器端完全是java语言。客户端只有几行html,其余的是纯javascript (我不使用ajax或jquery等)。
客户端通过输入框接收用户输入,当用户单击按钮时,客户端使用XmlHtpRequest向服务器发送POST请求。然后,服务器运行一个可能需要几分钟的进程。服务器定期(每5秒)发送一条进度更新消息,HTTP状态码为202,内容为"Processing.... completed 5/ 100“。数字5和100是一个示例。它不是100,而是进程的实际最终计数器,而不是5,而是指示进度的当前计数器。当服务器完成处理时,它发送一个200OK,并将最终输出作为内容。我有一个output文本区,我想在其中显示处理过程中的进度消息,稍后最终输出也放在同一个output文本区中。
我的客户端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并没有得到所有的代码。我能够从服务器获得第一条进度消息--类似于-“正在处理... 5/ 100”--但在那之后,我就无法在服务器发送消息时进一步调用getServerResponse()来继续更新进度。如果我修改服务器端以避免发送进度,而只发送最终的输出结果,它可以正常工作,并在客户端显示最终的输出结果。我在IE10和Chrome上运行,行为相同。xmlHttpRequest()可以用于此用例吗?我做错了什么吗?任何帮助都将不胜感激。谢谢。
发布于 2014-10-29 22:52:14
我自己也是个新手,正在努力想出一种方法来实现类似的目标。我认为202状态码是您将得到的唯一响应,即服务器将在接受作业(202)时发送单个响应,或在作业完成时发送200响应。
https://stackoverflow.com/questions/25642026
复制相似问题