0

可能重复:
返回自动下载 JQuery Ajax 调用

我正在用 PHP 创建一个文件 zip-fly。该文件创建没有问题。即使我将其设置为不保存在服务器上,但立即开始下载。

在该文件中,我通过按下按钮从另一个文件中调用 jquery。代码如下。

$(".down").on("click",function(){
  id = this.id;
  $.ajax({
    type: "POST",
    url: "files/down.php",
    data: "id="+id,
    cache: false,
    success: function(data){
        //alert(data)
    }
  });
});

我希望当您单击按钮时,我会显示浏览器下载窗口,但我不这样做......而且不知道如何......

一切正常,因为如果我告诉 PHP 将文件保存在服务器上。如果你告诉我答案alert()让我充满了奇怪的符号,所以有些东西正在返回,但不是如何通过下载窗口将其返回给我。

有谁知道该怎么做?

4

1 回答 1

-1

如果您不想使用 iframe。

我成功地使用了这个方法:

  1. 执行 ajax 调用,然后让脚本压缩它并将其临时保存在服务器上。
  2. 将此临时存储文件的链接返回到您的 js / 或将即时返回文件的链接。
  3. 将链接设置为 window.location.replace()

我使用的代码。

在 js 部分,只需调用 ajax 请求,然后等待它完成,这就是我用来将文件返回到服务器端脚本以获取假文件位置的方法。:

$fakefile = $doc['doc_name'];

$finfo = new finfo(FILEINFO_MIME);
$mm_type = $finfo->file($realfile);

header("Cache-Control: public, must-revalidate"); 
header("Pragma: no-cache"); 
header("Content-Type: " . $mm_type); 
header("Content-Length: " .(string)(filesize($realfile)) ); 
header('Content-Disposition: attachment; filename="'.$fakefile.'"'); 
header("Content-Transfer-Encoding: binary"); 
readfile($realfile);
exit;

回到 js:捕捉响应:

$.post( href, null,
  function(data) {

  // file exist and is downloadable for user - call it for real.
  if(data.success === 1) {
     window.location.replace(href);
  }
  // there were errors  - display message.
  }
},'json');

希望能帮助到你。

于 2013-01-18T21:47:41.347 回答