我想知道在 Ajax 处理请求时是否可以打印一些东西。如果是,请告诉我,因为我面临一个问题,我想在 Ajax 调用请求之间打印一些东西,它的响应来了
实际上,我想读取 3000 多行的 csv,在此过程之间,我想显示在另一个 csv 中读取和复制的行数。
所以我想显示类似进程栏的内容,在 3000 行中完全有 50 行副本,这将继续处理,直到达到 3000 行。
有办法然后让我知道!
您可以尝试多种方法之一来解决此问题:
JSONP 回调:这是解决您问题的恰当解决方案。您可以批量处理 50 行 CSV 数据的响应。每个 JSONP 调用都会有一个开始,并将获得 50 行数据。因此,要获取 300 行数据,您将有 6 个回调。您可以传递一个 start 参数并返回 start - start+49 行(总共 50 行),当 start == 1 时,您也可以传递标题。在每次成功回调时,您可以按比例增加进度条。
优点:很容易显示没有进度。的行。
缺点:响应中返回的数据必须是 JSON 格式;需要实现回调函数。
计算字节数:显示没有进度。传输的字节数。Stackoverflow上提供了一个示例。不确定它是否适用于您的情况,因为您想在否的基础上显示进度。的行。
优点:很容易显示没有进度。字节数。
缺点:可能不适用于您的情况。
加载图标或栏:这是最简单的方法。只需显示加载图像或不断重复的连续进度条。
优点:容易显示持续的进步。
缺点:只是向用户显示正在发生的事情,没有百分比基础。
根据您的情况,可能还有其他解决方案,因此请以此为起点并进一步探索。
您可以使用 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 等。