2013-05-04 85 views
0

我想知道在Ajax处理请求时是否可以打印某些内容。如果是,请让我知道,因为我面临的是一个问题,我想获得在Ajax调用请求和它的响应之间打印一些东西Ajax如何在生成响应时获得多个响应

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

所以我想显示的东西像3000过程中有50行完全复制,这将继续进行下去,直到它将达到3000行。

它有一种方式,然后让我知道!

+0

请提供更多详情 – 2013-05-04 12:00:43

+0

好的我添加了一些更详细的信息,所以它没关系!或让我知道是否有更多信息需要。 – drsndodiya 2013-05-04 12:35:01

回答

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?

但你的问题是更不是简单地我有1000个字节了的可能9999。你想知道到底有多少行你已经阅读到这一点。

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

但对于像zip.js请求压缩内容时使用非文本二进制数据与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等

0

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

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

    1. 优点:易展上没有取得任何进展。的行。

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

  • 计算字节: 显示上没有任何进展。传输的字节数。一个例子可在Stackoverflow上找到。不知道它是否适用于您的情况,因为您希望以no为基础显示进度。的行。

    1. 优点:易展上没有取得任何进展。的字节。

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

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

    1. 优点:轻松展现不断进步。

    2. 缺点:只显示用户发生了什么事情,没有百分比的基础上。

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