我有一个强制下载的脚本,我通过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脚本发送标头。现在我只需要一种方法来显示下载对话框!!
答案 0 :(得分: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>
答案 1 :(得分:0)
如果它是完整的download.php脚本我找不到变量$ file(只有$ filename) - 但在JS中你发送一个$ file变量。第二:JS中的错误 - 为什么在msg
和data:
中使用这样的变量名success:
?
答案 2 :(得分:0)
我的看法是,正如sktrdie指出的那样,这可能是预期的。我现在无法测试,但如果你考虑一下:用户本身并没有得到任何关于你正在做的AJAX的通知。突然之间发出这样的信息会令人恼火。
我想如果你在那个页面上创建一个(甚至是隐藏的?)iframe并重定向到那个下载URL就可以得到那个对话框了。 YMMV,HTH。
答案 3 :(得分:0)
我还没有编写php一段时间,所以我不确定你的代码是否有任何问题。但我认为问题在于你的方法。您需要在框架中加载download.php而不是作为对ajax调用的响应。所以基本上你需要在文档中形成一个不可见的iframe,并将其指向download.php,并将get参数附加到url。