XmlHttpRequest不报告服务器端进度

时间:2014-09-03 10:30:34

标签: xmlhttprequest progress

我有一个客户端服务器应用程序。服务器端完全在java中。客户端有几行html,其余的都是普通的javascript(我不使用ajax或jquery等)。

客户端通过输入框接收用户输入,当用户单击按钮时,客户端使用XmlHtpRequest向服务器发送POST请求。然后,服务器运行一个可能需要几分钟的过程。服务器定期(每5秒)发送一个进度更新消息,其中包含HTTP状态代码202和内容“Processing .... completed 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没有得到所有这些。我能够从服务器获得第一个进度消息 - 类似于“处理.... 5/100” - 但之后我无法进一步调用getServerResponse()以继续更新进度。服务器发送消息。如果我修改服务器端以避免发送进度并仅发送最终输出结果,它可以正常工作,并在客户端显示最终输出结果。我在IE10和Chrome上运行此操作,具有相同的行为。可以将xmlHttpRequest()用于此用例吗?难道我做错了什么?任何帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

我自己也是新手,并试图找到一种实现类似方法的方法。 我认为202状态代码是您将获得的唯一响应,即服务器在接受作业时将发送单个响应(202),或者在响应完成时发送200响应。

来源: http://100pulse.com/http-statuscode/202.jsp