Ajaxがリクエストを処理している間に何かを印刷できるかどうか知りたいです.もしそうなら、私に知らせてください.
実際には、3000行以上のcsvを読みたいのですが、このプロセスの間に、別のcsvで読み取ってコピーした行を表示したくありません。
だから私はプロセスバーのようなものを表示したい.
それは方法があるので、私に知らせてください!
この問題を解決するには、複数のアプローチのいずれかを試すことができます。
JSONP Callback : これは問題の適切な解決策です。応答を 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 Progress Events をサポートしているかどうかを 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 など。