我有一个(GET)端点,以块(Transfer-Encoding: chunked
)发送数据。数据经过JSON编码并逐行发送。
有没有办法在JavaScript(或使用一些JavaScript库)中以异步方式使用此端点发送的数据?
要清楚,我知道如何执行异步GET
,但我希望GET
请求不等待传输整个数据,而是通过以下方式读取数据行线路到达时。例如,在做的时候:
curl http://localhost:8081/numbers
以下几行在可用时逐一显示(我所做的示例服务器在发送一行和第二行之间等待一秒钟。)
{"age":1,"name":"John"}
{"age":2,"name":"John"}
{"age":3,"name":"John"}
{"age":4,"name":"John"}
我想重现相同的行为curl
展品,但在浏览器中。我不想让用户等到所有数据都可用才能显示任何内容。
答案 0 :(得分:5)
感谢Dan和Redu我能够使用Fetch API汇总一个以增量方式使用数据的示例。需要注意的是,这不适用于Internet Explorer,并且必须由用户在Firefox中启用:
/** This works on Edge, Chrome, and Firefox (from version 57). To use this example
navigate to about:config and change
- dom.streams.enabled preference to true
- javascript.options.streams to true
See https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream
*/
fetch('http://localhost:8081/numbers').then(function(response) {
console.log(response);
const reader = response.body.getReader();
function go() {
reader.read().then(function(result) {
if (!result.done) {
var num = JSON.parse(
new TextDecoder("utf-8").decode(result.value)
);
console.log(
"Got number " + num.intVal
);
go ();
}
})
}
go ();
})
完整示例(使用服务器)可用at my sandbox。我发现它说明XMLHttpRequest
将此版本与this one进行比较的限制,不使用fetch
API。