Ajax如何在响应生成时获得多响应

时间:2013-05-04 11:43:55

标签: ajax jquery

我想知道在Ajax处理Request时是否有可能获得打印内容。如果是,那么请让我知道,因为我面临一个问题,我想在Ajax调用请求和它之间打印一些东西回应来了

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

所以我希望显示类似于流程栏的内容,完全有50行副本,这将继续处理,直到达到3000行。

有一种方式让我知道!

2 个答案:

答案 0 :(得分: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

How to check in JavaScript if XMLHttpRequest object supports W3C Progress Events?

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

我认为您可以在每个进度事件上阅读xhr.responseText,但前提是请求在不完整时可解析(例如纯文本),以及不使用异步请求时{ - 3}}。< / p>

但是对于像https://stackoverflow.com/a/5319647/319878这样的库在请求压缩内容时使用带有arraybuffer的非文本二进制数据的库,这是行不通的,因为这些请求必须是异步的(zip.js)。如果在这种情况下尝试使用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等

答案 1 :(得分:0)

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

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

    1. 优点:很容易在no上显示进度。行。

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

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

    1. 优点:很容易在no上显示进度。字节。

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

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

    1. 优点:轻松展示持续进展。

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

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