$_POST
変数を使用してPDFファイルをダウンロードするPHPスクリプトがあります。このスクリプトは、ブラウザでファイルを読み込むのではなく、ダウンロードしてファイルとして返すように設定されていますまたはファイルをサーバーに保存します。jQuery PDFダウンロード - お待ちください。
このファイルをシンプルな形式でダウンロードできますが、問題はまったくありませんが、処理時間が約5~10秒であるため、jQueryにclick
イベントを処理させて、処理が完了すると、スクリプトが処理されている間に「お待ちください」というメッセージが表示され、処理が完了すると「ファイルのダウンロードが開始されました」というメッセージが表示されます。
click
には「しばらくお待ちください」というメッセージが表示されますが、ページの処理が完了した時点を特定できないため、PDFをダウンロードしても「しばらくお待ちください」というメッセージが表示されます。
私はpreventDefault
を使用して、ajax
でclick
イベントとPOST
データを処理するためのjQueryを使用している場合は、私が手に正しい「待って」とメッセージ「開始のダウンロード」が、ブラウザにファイルのダウンロードを返すことができません。
preventDefault
を使用しないで一時的に両方の方法を組み込んでいますが、これはユーザーには正しい動作です。ファイルのダウンロードが開始されるまで「しばらくお待ちください」と表示され、実際にダウンロードを開始します。しかし、私は確信しているので、これは実際にデータを2回転記しています.1回はform
で、もう1回はjQuery
で、要求を完了するのに同じ時間がかかるので、私が望む機能が達成されます。
私が適切にしたいことを達成する方法はありますか?
jQueryのを "作業" HTMLフォーム($filename
がデータベース呼び出しからである)
<form method="post" action="pdf/index.php" name="pdfForm" id="pdfForm">
<button type="submit" class="downloadButton"
name="filename" value="'.$filename.'">'.$filename.'</button>
</form>
(申し訳ありませんが、私が試した他のバージョンからいくつかの冗長性がある)
<script>
$(document).ready(function() {
$('.downloadButton').on('click', function(e) {
//e.preventDefault(); // File will not download if this is not commented out
var $filename = $(this).val();
var $thisBox = $(this);
var $url = $('#pdfForm').attr('action');
$thisBox.text("Please Wait");
url = $url;
return $.post(url, {filename: $filename})
.done(function(data) {
$thisBox.text("File Download has started");
// This won't happen unless e.preventDefault() is excluded
});
});
});
</script>
私は解決策を望む他にも何も質問しなかったが、私にはうってつけのものは何も見つかりませんでした。私が得た最も近いものはajax
blob
でしたが、古いブラウザーのサポートが必要で、結果はあまり大きくありませんでした。
何か助けていただければ幸いです。私はちょうど何かが明らかに欠けていて、今はそれをずっと見ていることができません。