2

window.locationをphpファイルに設定するボタンがあります。このファイルはフィードを生成してダウンロードします。ただし、フィードに入力されるデータによってファイルのサイズが異なるため、ボタンをクリックしてからファイルダイアログがポップアップするまでに時間がかかる場合があります。

私ができるようにしたいのは、ボタンをクリックして、ダイアログ/ファイルが完了するまでloading.gifを表示することです。

どんなアイデアでもかっこいいです!

乾杯

4

7 に答える 7

5

なぜファイルのサイズをチェックする必要があるのか​​よくわかりません。ajaxを使用してget/postを動的に実行し、これが発生している間に読み込みアイコンを表示しようとしている場合、非同期アクティビティインジケーターをスローするのは非常に簡単です。たとえば、jqueryの場合:

$("#loading").ajaxStart(function(){
   $(this).show();
});

$("#loading").ajaxStop(function(){
   $(this).hide();
});

$("#feeds").load("feeds.php?id=89734258972347895");

上記のコードは、非同期リクエストが開始および停止されたときに表示および非表示にするID「loading」のDOMオブジェクトを設定します。.load(url)は、URLのコンテンツをdiv#feedsにロードします。phpを使用してcontent-disposition:添付ファイルヘッダーを設定している場合、divに非同期で読み込まれている場合でも、ファイルのダウンロードウィンドウが自動的に開始されます。もちろん、これはjqueryがなくても可能です。ブラウザとの互換性のあるjavascriptがたくさんあり、ajaxStartイベントとajaxStopイベントをサブスクライブして、読み込み中のimgを表示および非表示にするほど簡単ではありません。

ジョシュ

于 2009-09-15T14:59:41.017 に答える
1

古い学校ですが、これはサーバープッシュで非常に簡単に行うことができます

<?php
  $separator = "end_of_section_marker";
  header('Content-type: multipart/x-mixed-replace;boundary=$separator');
  print "\n--$separator\n";
  print "Content-type: text/html\n\n";
  // Send placeholder message here
  print "--$separator\n";
  ob_flush();
  flush();
  // Start long processing here
  print "Content-type: text/html\n\n";
  // send data here
  print "--$separator--\n";
?>

送信するデータのコンテンツタイプを調整するだけです。$ Separatorは、送信されるデータに表示されない限り、任意の値にすることができます。

于 2009-09-15T18:09:07.263 に答える
1

window.locationを設定する前に、gifで非表示のdivを表示できます

于 2009-09-09T14:32:49.307 に答える
1

私が過去に使用した方法はこのように機能します...

  • window.locationを読み込みページに設定し、クエリ文字列で宛先ページを渡します。読み込みページには、アニメーションGIFや、処理が行われていることを示すために必要なものが表示されます。ロードページは、クエリ文字列で渡された宛先ページに(他の該当するクエリ文字列パラメータとともに)すぐにリダイレクトする必要があります。

編集:読み込みページは、javascriptを使用して宛先ページにリダイレクトする必要があります(window.locationをクエリ文字列で指定されたURLに設定します)。サーバー側でリダイレクトすると、読み込みページが表示されないため、これは重要なポイントです。

編集2:読み込みページがphpファイルの場合、ダウンロードするファイルのサイズを確認し、(アニメーション化された「読み込み中」のgifとともに)ユーザーに推定ダウンロード時間を表示することができます。

  • 宛先ページは、バッファリングを有効にしてレンダリングする必要があります(コンテンツをレンダリングする前にob_start()を呼び出します)。バッファリングを有効にすると、ページ全体がレンダリングされるまでブラウザに何も送信されません。その間、手順1の読み込みページは引き続き表示されます。
于 2009-09-17T14:20:27.063 に答える
0

ダウンロードするファイルの正確なサイズを検出するには、AJAXを使用してサーバーと通信する必要があります。次に、テストするものがあります。クライアント側からのみ、予想されるペイロードのサイズを知る方法はありません。

于 2009-09-12T12:00:34.530 に答える
0

iframeを使用してフィードを読み込み、間隔を使用してiframe /ドキュメントのreadyStateを確認することは可能ですか?したがって、プロセスは次のようになります。

  • 幅と高さが100%のiframeとloading.gifを含むウィンドウをiframeにロードします。
  • iframe.contentWindow.document.readyStateプロパティをチェックするタイマーを設定します
  • readyState ==が完了したら、ファイルの保存ダイアログを表示します。

1つの欠点は、ほとんどのブラウザーでPHPファイルが同じドメインにある必要があることです(IEではiframeのreadyStateプロパティを確認するだけです)。

于 2009-09-15T08:57:51.710 に答える
0

RSS生成スクリプトに必要な画像を表示させるだけです(出力画像のHTMLを出力してから、出力バッファをフラッシュしてデータ生成を開始します)。データ生成の最後に、次のことを行います。

<?php
print '<script>window.location = "http://www.newlocation.com"</script>'

それで全部です。

于 2009-09-18T07:37:13.163 に答える