1

ダウンロードを強制するスクリプトがあり、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 に正しいヘッダーを持つファイルが含まれていることはわかっていますが、ダウンロード ダイアログ ボックスを表示するためにどうすればよいかわかりません。

皆さんありがとう

ps このスレッド JS または PHP をどこに置くべきかわかりませんでした。

編集:

私はそれを確信している正しいアプローチを持っています:) - ユーザーが私のサイトに来て、フォームに記入し、送信を押します。数秒後、ダウンロードできるダイアログ ボックスにファイルが表示されます。これをする:

ファイルを取得してダウンロードするために AJAX 呼び出しを行います。PHP スクリプトを使用してヘッダーを送信します。今必要なのは、ダウンロード ダイアログ ボックスを表示する方法だけです!!

4

4 に答える 4

2

それが 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>
于 2009-01-08T22:59:21.060 に答える
0

しばらく php をコーディングしていないので、コードに問題があるかどうかはわかりません。しかし、問題はあなたのアプローチにあると思います。ajax 呼び出しへの応答としてではなく、フレームに download.php をロードする必要があります。したがって、基本的には、ドキュメント内に非表示の iframe を形成し、それを URL に追加された get パラメータを使用して download.php にポイントする必要があります。

于 2009-01-08T23:08:00.560 に答える
0

完全な download.php スクリプトの場合、変数 $file ($filename のみ) が見つかりませんが、JS では $file 変数を送信します。2 番目: JS に何か問題があります - なぜそのような変数名msgを indata:と in で使用するのsuccess:ですか?

于 2009-01-08T23:03:01.677 に答える
0

私の見解では、sktrdie が指摘しているように、これは予想されることです。今はテストできませんが、よく考えてみると、ユーザー自身は、実行中の AJAX に関する通知を受け取りません。突然そのようなメッセージが表示されるとイライラします。

そのページに (非表示でも?) iframe を作成し、そのダウンロード URL にリダイレクトすると、そのダイアログが表示されると思います。YMMV、HTH。

于 2009-01-08T23:05:06.493 に答える