首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ajax可以逐行返回从服务器接收的数据吗?

Ajax可以逐行返回从服务器接收的数据吗?
EN

Stack Overflow用户
提问于 2020-06-13 22:50:39
回答 1查看 37关注 0票数 0

我正在做一个数据导入使用php (Laravel),它有4-5个不同的统计表。

所以,我想要列出所有它们,以及每个产品的状态,无论是插入还是更新。

在ajax中有没有一种方法,我可以从服务器获取从服务器返回的字符串,它是逐行回显的?而不是在一切都完成后立即完成?

喜欢

开始..。

正在复制文件...

正在执行...

产品1 ..

产品2 ..

完成了..。

代码语言:javascript
复制
        $.ajax({
            url: "product-import.php",
            type: 'POST',
            data: new FormData(this),
            dataType:'text',
            contentType: false,
            cache: false,
            processData: false,
            success: function (data) {
                console.log(data);
                $('#importStatus').append(data);
            }
        });
EN

回答 1

Stack Overflow用户

发布于 2020-06-13 23:25:17

是的,但据我所知,jQuery Ajax没有提供公开它的应用程序接口。

fetch API支持流响应正文。响应对象的body有一个返回读取器的getReader方法。

每次在读取器上调用read()时,您都会得到一个promise,该promise解析为具有valuedone状态的对象,因此您可以循环,直到done变为真值。

请注意,由于您得到的是字节流,因此需要decode them to text

给定一个这样的测试脚本(请注意,一旦数据可用,它如何将数据发送到客户端,如果现有脚本缓冲了所有数据,则这将不起作用!):

代码语言:javascript
复制
<?php

$counter = 20;

while ($counter) {
    echo $counter--;
    ob_end_flush();
    sleep(2);
}

您可以像下面这样以流的形式访问响应:

代码语言:javascript
复制
<!DOCTYPE HTML>
<title>Stream Test</title>
<h1>Stream Test</title>
<script>
async function init() {
    const response = await fetch("api.php");
    const reader = await response.body.getReader();
    let going = true;
    while (going) {
        const {value, done} = await reader.read();
        const string = new TextDecoder("utf-8").decode(value);
        if (done) {
            going = false;
        } else {
            const paragraph = document.createElement("p");
            const text = document.createTextNode(string);
            paragraph.appendChild(text);
            document.body.appendChild(paragraph);
        }
    }
}

init();
</script>

请记住,此演示使用非常小的、间隔良好的数据块。更大的数据位很可能被分成更小的块,即使它们是紧密地一起到达的。您可能希望在客户端对它们进行缓冲,直到服务器发送一个显式的"end of section“令牌。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62361425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档