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

如果它是完整的 download.php 脚本,我在其中找不到变量 $file(只有 $filename)-但在 JS 中,您发送了一个 $file 变量。第二:JS 出了点问题——为什么你msg在 indata:和 in 中使用这样的变量名success:

于 2009-01-08T23:03:01.677 回答
0

正如 sktrdie 所指出的,我的看法是这可能是意料之中的。我现在不能测试,但如果你想一想:用户本身并没有收到任何关于你正在做的 AJAX 事情的通知。突然收到这样的信息会很烦人。

我猜如果您在该页面上创建一个(甚至隐藏?)iframe 并重定向到该下载 URL,您将获得该对话框。YMMV,HTH。

于 2009-01-08T23:05:06.493 回答
0

我有一段时间没有编写 php 代码了,所以我不确定你的代码是否有问题。但我认为问题出在你的方法上。您需要在框架中加载 download.php,而不是作为对 ajax 调用的响应。因此,基本上您需要在文档中形成一个不可见的 iframe,并将其指向 download.php,并将 get 参数附加到 url。

于 2009-01-08T23:08:00.560 回答