Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
实时处理巨大而缓慢的传入ajax响应_Ajax_Jquery - Fatal编程技术网

实时处理巨大而缓慢的传入ajax响应

实时处理巨大而缓慢的传入ajax响应,ajax,jquery,Ajax,Jquery,我正在尝试将AJAX请求作为Web应用程序的一部分来实现。 服务器端需要很长时间才能完全处理请求,但它可以很早输出结果的单个项。 因此,我的意图是让客户端在响应部分到达时立即呈现它们,而不是等到响应完成 以下是我的(简化)服务器端代码: for (myObj o : db.results()) { // some rather slow operations at this place JSONObject j = new JSONObject(); j.put("tag

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

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

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()
,我都找不到执行函数的方法。 有没有办法做到这一点?

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

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


它不优雅。。。但它很简单,而且很有效

我认为您需要操作服务器端并将响应拆分为小图片。我不认为有一种方法可以满足您的要求,即有效地将响应流式传输到客户端。我认为多个ajax调用是最好的选择。选择websocket或进行长时间轮询。@pdegand59:谢谢-websocket提示看起来很有希望@Archer/Alepac:是的,我考虑过多个ajax调用或拆分响应,但这会在服务器端带来更多的开销。我不太喜欢这种方法,因为它会增加服务器端的开销,而且不是很优雅(如您所说)。我想我会尝试像PDEGAND59建议的WebSoCK通信,不用担心,这只是另一个选择。我过去就这样做过,在某些情况下(例如,低使用组件、非常长的流程等),它往往工作得很好,同时实现起来非常简单。