我有一个强制下载的脚本,我通过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变量。第二:JS中的错误 - 为什么在 data: success:中使用这样的变量名 msg

我的看法是,正如sktrdie指出的那样,这可能是预期的。我现在无法测试,但是如果你考虑一下:用户本身并没有得到关于你正在做的AJAX的任何通知。突然之间发出这样的信息会令人恼火。

我想如果你在那个页面上创建一个(甚至是隐藏的?)iframe并重定向到那个下载URL就可以得到那个对话框了。 YMMV,HTH。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top