0

我想知道在 Ajax 处理请求时是否可以打印一些东西。如果是,请告诉我,因为我面临一个问题,我想在 Ajax 调用请求之间打印一些东西,它的响应来了

实际上,我想读取 3000 多行的 csv,在此过程之间,我想显示在另一个 csv 中读取和复制的行数。

所以我想显示类似进程栏的内容,在 3000 行中完全有 50 行副本,这将继续处理,直到达到 3000 行。

有办法然后让我知道!

4

2 回答 2

0

您可以尝试多种方法之一来解决此问题:

  • JSONP 回调:这是解决您问题的恰当解决方案。您可以批量处理 50 行 CSV 数据的响应。每个 JSONP 调用都会有一个开始,并将获得 50 行数据。因此,要获取 300 行数据,您将有 6 个回调。您可以传递一个 start 参数并返回 start - start+49 行(总共 50 行),当 start == 1 时,您也可以传递标题。在每次成功回调时,您可以按比例增加进度条。

    1. 优点:很容易显示没有进度。的行。

    2. 缺点:响应中返回的数据必须是 JSON 格式;需要实现回调函数。

  • 计算字节数:显示没有进度。传输的字节数。Stackoverflow上提供了一个示例。不确定它是否适用于您的情况,因为您想在否的基础上显示进度。的行。

    1. 优点:很容易显示没有进度。字节数。

    2. 缺点:可能不适用于您的情况。

  • 加载图标或栏:这是最简单的方法。只需显示加载图像或不断重复的连续进度条。

    1. 优点:容易显示持续的进步。

    2. 缺点:只是向用户显示正在发生的事情,没有百分比基础。

根据您的情况,可能还有其他解决方案,因此请以此为起点并进一步探索。

于 2013-05-05T05:29:24.907 回答
0

您可以使用 XHR 进度事件(如果您的浏览器支持它们):

https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/Using_XMLHttpRequest#Monitoring_progress

https://dvcs.w3.org/hg/progress/raw-file/tip/Overview.html#interface-progressevent

如果 XMLHttpRequest 对象支持 W3C 进度事件,如何检查 JavaScript?

但是您的问题不仅仅是我在可能的 9999 中有 1000 个字节。您想确切地知道到目前为止您已经阅读了多少行。

我认为您可以阅读xhr.responseText每个进度事件,但前提是请求在不完整(例如纯文本)以及不使用异步请求时是可解析的 - https://stackoverflow.com/a/5319647/319878

但是对于像zip.js这样的库在请求 zip 内容时使用带有 s 的非文本二进制数据arraybuffer,这将不起作用,因为这些请求必须是异步的(http://www.w3.org/TR/XMLHttpRequest/#the-responsetype-attribute)。如果您尝试xhr.responseText在这种情况下使用,您将收到如下错误(来自 Firefox 的示例):

[Exception... "An attempt was made to use an object that is not, or is no longer, usable"
code: "11"
nsresult: "0x8053000b (InvalidStateError)"
location: "http://localhost/xhr-progress-test/test-xhr-on-progress.html Line: 1075"]

因此,对于压缩内容(使用zip.js),我认为您必须等待所有响应到达后才能使用它。这不是你想要的。

更简单的是修改您的服务器代码以一次返回一组行。例如第 1-100 行,然后是 101-200 等。

于 2013-05-04T12:53:00.597 回答