質問
ダウンロードを強制するスクリプトがあり、Javascriptを介してこれを呼び出します。ただし、ダイアログボックスは表示されません。download.phpスクリプトを次に示します。
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Type: $ctype");
// change, added quotes to allow spaces in filenames, by Rajkumar Singh
header("Content-Disposition: attachment; filename=\"".basename($properFilename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
exit();
Javascript(JQueryを使用)は次のとおりです。
///force download
$.ajax({
type: "GET",
url: "download.php",
data: 'file=' + msg + '&properFilename=' + properFileName,
success: function(msg){
window.location.href = msg;
});//ajax
これにより、ダウンダイアログボックスが表示されるのではなく、ブラウザが別のページにリダイレクトされます。
JS変数msgには正しいヘッダーを持つファイルが含まれていることは知っていますが、ダウンロードダイアログボックスを表示するためにそれをどうするかわかりません。
ありがとうございます
p.s。このスレッドJSまたはPHPの配置場所がわかりませんでした。
編集:
私はそれを確信している正しいアプローチを持っています:)-ユーザーが私のサイトに来て、フォームに記入し、送信を押します。数秒後に、ダウンロード可能なダイアログボックスにファイルが表示されます。これを行うには:
ファイルを取得してダウンロードするためにAJAX呼び出しを行います。 PHPスクリプトを使用してヘッダーを送信します。必要なのは、ダウンロードダイアログボックスを表示する方法だけです!!
解決
Ajax呼び出しであるという事実を示すダイアログボックスは表示されません。
window.location.href = msg;
それはあなたをリダイレクトしているものです。ここでajaxを呼び出す必要はないと思います。通常はhrefリンクでページを呼び出します。
編集
フォームを送信してダウンロード用のダイアログボックスを表示するには、次の操作を行います。
<script>
function showDialogBox(form) {
form.submit();
window.location.href = "/download.php?file=XXX&properFilename=XXX";
}
</script>
<form onsubmit="showDialogBox(this);">
</form>
他のヒント
完全なdownload.phpスクリプトの場合、変数$ file($ filenameのみ)が見つかりませんが、JSでは$ file変数を送信します。 2番目:JSの問題-このような変数名 msg
を data:
および success:
で使用する理由?
私の考えでは、sktrdieが指摘しているように、これは予想されることです。今はテストできませんが、考えてみると、ユーザーはAJAXの内容について通知を受け取っていません。突然そのようなメッセージがあるといらいらします。
そのページでiframeを作成して(非表示でも?)、そのダウンロードURLにリダイレクトすると、そのダイアログが表示されると思います。 YMMV、HTH。
しばらくの間phpをコーディングしていないので、コードに何か問題があるかどうかはわかりません。しかし、問題はあなたのアプローチにあると思います。 ajax呼び出しへの応答としてではなく、フレームにdownload.phpをロードする必要があります。したがって、基本的には、ドキュメントに非表示のiframeを作成し、urlにパラメータを追加してdownload.phpを指すようにする必要があります。