window.locationをphpファイルに設定するボタンがあります。このファイルはフィードを生成してダウンロードします。ただし、フィードに入力されるデータによってファイルのサイズが異なるため、ボタンをクリックしてからファイルダイアログがポップアップするまでに時間がかかる場合があります。
私ができるようにしたいのは、ボタンをクリックして、ダイアログ/ファイルが完了するまでloading.gifを表示することです。
どんなアイデアでもかっこいいです!
乾杯
window.locationをphpファイルに設定するボタンがあります。このファイルはフィードを生成してダウンロードします。ただし、フィードに入力されるデータによってファイルのサイズが異なるため、ボタンをクリックしてからファイルダイアログがポップアップするまでに時間がかかる場合があります。
私ができるようにしたいのは、ボタンをクリックして、ダイアログ/ファイルが完了するまでloading.gifを表示することです。
どんなアイデアでもかっこいいです!
乾杯
なぜファイルのサイズをチェックする必要があるのかよくわかりません。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を表示および非表示にするほど簡単ではありません。
ジョシュ
古い学校ですが、これはサーバープッシュで非常に簡単に行うことができます
<?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は、送信されるデータに表示されない限り、任意の値にすることができます。
window.locationを設定する前に、gifで非表示のdivを表示できます
私が過去に使用した方法はこのように機能します...
編集:読み込みページは、javascriptを使用して宛先ページにリダイレクトする必要があります(window.locationをクエリ文字列で指定されたURLに設定します)。サーバー側でリダイレクトすると、読み込みページが表示されないため、これは重要なポイントです。
編集2:読み込みページがphpファイルの場合、ダウンロードするファイルのサイズを確認し、(アニメーション化された「読み込み中」のgifとともに)ユーザーに推定ダウンロード時間を表示することができます。
ダウンロードするファイルの正確なサイズを検出するには、AJAXを使用してサーバーと通信する必要があります。次に、テストするものがあります。クライアント側からのみ、予想されるペイロードのサイズを知る方法はありません。
iframeを使用してフィードを読み込み、間隔を使用してiframe /ドキュメントのreadyStateを確認することは可能ですか?したがって、プロセスは次のようになります。
1つの欠点は、ほとんどのブラウザーでPHPファイルが同じドメインにある必要があることです(IEではiframeのreadyStateプロパティを確認するだけです)。
RSS生成スクリプトに必要な画像を表示させるだけです(出力画像のHTMLを出力してから、出力バッファをフラッシュしてデータ生成を開始します)。データ生成の最後に、次のことを行います。
<?php
print '<script>window.location = "http://www.newlocation.com"</script>'
それで全部です。