当前位置: 首页 > 面试题库 >

如何在客户端编写JavaScript以及时接收和解析“块”响应?

帅博远
2023-03-14
问题内容

我正在使用播放框架来生成分块响应。代码是:

class Test extends Controller {
    public static void chunk() throws InterruptedException {
        for (int i = 0; i < 10; i++) {
            String data = repeat("" + i, 1000);
            response.writeChunk(data);
            Thread.sleep(1000);
        }
    }
}

当我使用浏览器访问时http://localhost:9000/test/chunk,可以看到显示的数据每秒增加。但是,当我编写一个JavaScript函数来接收和处理数据时,发现它将阻塞直到接收到所有数据。

代码是:

$(function(){
    $.ajax(
        "/test/chunked", 
        {
            "success": function(data, textStatus, xhr) {
                alert(textStatus);
            }
        }
    );
});

当收到所有数据后,我可以看到一个消息框在10秒钟后弹出。

如何获取流并及时处理数据?


问题答案:

jQuery不支持该功能,但是您可以使用普通XHR来实现:

var xhr = new XMLHttpRequest()
xhr.open("GET", "/test/chunked", true)
xhr.onprogress = function () {
  console.log("PROGRESS:", xhr.responseText)
}
xhr.send()

这适用于所有现代浏览器,包括此处的 IE10。W3C规范。

这里的缺点是xhr.responseText包含累积的响应。您可以在其上使用子字符串,但更好的主意是使用responseType属性并slice在上使用ArrayBuffer



 类似资料:
  • 我正在发送一个请求到一个服务器,它给了我一个200,没有身体(完全可以接受),但是我无法解决如何配置micronaut注释来处理这个问题。无论我尝试什么,它都试图将空响应解码为JSON(至少我认为这是它正在做的,因为它给出了一个意想不到的错误,而不是当身体出错时得到的正常杰克逊错误)。我在微型文档中找不到任何关于如何做到这一点的东西。

  • 问题内容: 我有一个Java控制器,必须向我发送一些文本数据和不同的字节数组。因此,我正在构建n多部分请求,并将其写入到HttpServletResponse的流中。 现在我的问题是如何在客户端解析响应并提取多个部分。 服务器代码片段:- 客户代码片段:- 我检查了CloseableHttpResponse和HttpEntity,但是它们都不提供解析多部分请求的方法。 编辑1:这是我在客户端流中收

  • 我有一个java控制器,它必须向我发送一些文本数据和不同的字节数组。因此,我正在构建一个多部分请求,并将其从HttpServletResponse写入流。 现在我的问题是如何在客户端解析响应并提取多个部分。 服务器代码片段:- 客户端代码段:- 我检查了CloseableHttpResponse和HttpEntity,但它们都没有提供解析多部分请求的方法。 编辑1:这是我在客户端流中收到的示例响应

  • 创建 HTTP 客户端 使用默认选项创建一个HttpClient实例,如下所示: HttpClient client = vertx.createHttpClient(); 如果您想要在创建时配置客户端的选项,如下所示: HttpClientOptions options = new HttpClientOptions().setKeepAlive(false); HttpClient clien

  • 创建 TCP 客户端 最简单的方法来创建一个 TCP 客户端,使用默认选项如下所示: NetClient client = vertx.createNetClient(); 配置 TCP 客户端 如果你不想使用默认值,则创建TCP 客户端时,通过传入NetClientOptions实例可以配置: NetClientOptions options = new NetClientOptions().s

  • 问题内容: 我有以下一段JSON: .NET代码的结果: 现在,我面临的问题是如何在JavaScript中创建一个Date对象。我所能找到的就是令人难以置信的正则表达式解决方案(许多包含错误)。 很难相信没有优雅的解决方案,因为这都是JavaScrip中的全部,我的意思是JavaScript代码试图读取应该被认为是JavaScript代码的JSON(JavaScript对象表示法),但现在看来,这