2010-12-17 6 views
0

私のWebアプリケーションでは、時にはかなり大きな10+ MBを得ることができるCVSファイルを生成することができます。このレポートには明らかに生成に時間がかかることがあります。レポートが生成されている間にユーザーのためにスロバを表示したいときは、スロボを非表示にしたいときに保存/実行するように求められます。これは可能ですか?大きなファイルを処理しているときにjQueryのスロバキア

答えて

1

いいえ、それはファイルが到着すると、ユーザーがそれを保存するときに検出する本当にことはできません。あなたはあまりにも多くのあなたのthrobberを更新し、彼らが続行する準備ができているときに継続的なリンクを提供しています。

これが可能であれば、ダウンロードサイトはファイルのリンク先ページを終了したらダウンロードリストに自動的に転送します。

+0

ええ、これはやっかいな気がしました。継続リンク/スロババーの他に重い処理がバックグラウンドで行われていることをユーザーに知らせる方法は本当にありますか? –

+0

これは可能ですが、大変な作業です。ダウンロードを開始するためにCSVにリダイレクトし、空のプログレスバーを置いて、コールバックを設定するために 'setTimeout'と言うとしましょう。後で、XMLHttpRequestを使用して、そのセッションでのダウンロードの進行状況をサーバーに問い合わせます。それはあなたに、もう一度別の時間 'setTimeout'を伝えます。サーバー上で、セッション変数を設定してCSV作成の進行状況を追跡します。サーバーが完了したら、完了コードを入力します。サーバー上のWebSocketsとnode.jsを使うともっと複雑になるかもしれませんが、ここで狂ってはいけません。 –

0

はい、通常、JavaScriptで大量の操作がチャンクに分割され、setIntervalから呼び出されます。タイムアウトは、ページがフリーズするのを防ぎます。

var csvTxt = ""; 
var isDone = false; 
addPart = function(){ 
    csvTxt += addTextFromLongCalculation(); 
    if(csvTxt > 10000000) isDone = true; // this is an arbitrary example 
} 

var handle = setInterval(function(){ 
    addPart(); 
    if(isDone){ 
     clearInterval(handle); 
    } 
}, 20); 
+0

これは分割に適していますが、彼はあまりにもスロバを追加したいと思っています...あなたの分割に加えて、この質問に対する答え - http://stackoverflow.com/questions/357323/showing-a-throbber -during-html-page-load-and-rendering/417710#417710彼は彼がどこになりたいかを手伝うべきです。 –

0

私はあなたがコンテンツタイプを設定してのが表示されるダイアログを保存し、ブラウザを待って、サーバ上のCSVを生成し、いくつかのデータを掲載していることを推測しています。正しい?

その場合、私はあなたが失望すると思います。私はかなりの時間をこの厳しいシナリオで発生するイベントを見つけるために費やしています。私はそれを理解できませんでした。私は最終的に、ファイルの作成状況をポーリングするためにXHRを使用するような複雑な処理をしなければなりませんでした。私が欲しかったレスポンスを得た後、私はスローバを隠し、CSVを要求しました。

鮮明にするには、次の

  • は、ファイル作成したらCSVの作成
  • の状態をポーリングするCSV生成
  • 使用XHRを開始するには、サーバーを伝えるためにスロバー
  • 使用XHRを表示
    • 新しく作成されたCSVを指す非表示のiframeをドキュメントに追加し、サーバーにコンテンツ処理ヘッダーを追加させます。
    • 少し遅れてスロバを非​​表示にします(ファイル保存ウィンドウが表示された後にスロボが表示されるように時間を計ることができますが、ユーザーがウィンドウとやりとりしている間にスクロールします)。また、恐怖を隠すためにウインドウのぼかしイベントを検出することもできますが、それはあまり信頼性が高くないと確信しています。
+0

それは正しいです。 –

+1

これはコメントではなく、回答として所属しています。私は、あなたがまだ任意の質問にコメントするのに十分な担当者を持っていないことを認識しています。 –

+0

そして私はできることをやりました。私はOPを助けることができると思ったが、もっと情報が必要だった。 – Hemlock

関連する問題