2013-05-04 86 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. 缺點:只顯示用戶發生了什麼事情,沒有百分比的基礎上。

可能有過根據您的情況的其他解決方案,請以此爲出發點,進一步探索。