0

我正在尝试将 AJAX 请求作为 WebApplication 的一部分来实现。服务器端需要很长时间才能完全处理请求,但它可以很早就输出单项结果。所以我的意图是让客户端在响应部分到达后立即渲染它们,而不是等到响应完成。

这是我的(简化的)服务器端代码:

for (myObj o : db.results()) {
    // some rather slow operations at this place
    JSONObject j = new JSONObject();
    j.put("tag1", o.tag1());
    j.put("tag2", o.tag2());
    System.out.println("Sending partial response: " + j.toString() );
    response.getWriter().write(j.toString());
    response.getWriter().flush();
}

我的客户端 jquery 请求看起来像这样:

$.ajax( {
    type: "GET",
    url: "queryURL",
    dataType: "text",
    success: function (data) {
        alert("received " + data);
    }
});

不幸的是,成功功能仅在响应完成后才执行。每次调用时我都找不到执行函数的方法response.getWriter().write()。有没有办法做到这一点?

4

1 回答 1

0

尝试实现“AJAX 推送”类型的实现可能非常困难。

一个更简单的实现可能是让您的 AJAX 调用在服务器上启动进程,但让服务器在执行它的操作时将正在进行的结果写入某个文件(即作为文本、xml 等)。您的 AJAX 成功/完成可能会以某个设定的间隔(即每 5 秒)读取此文件,直到它到达文件末尾。

它并不优雅......但它很简单并且有效!

于 2013-04-26T12:40:46.477 回答