如何使用ajax调用打开PDF

时间:2013-02-23 20:01:39

标签: php javascript jquery ajax

我有一个PHP脚本,可以从服务器下载PDF文件并提示您打开或保存。该脚本接受一次性令牌,用于代替文件名,以隐藏文件名。

如果你去实际的php页面,http://example.com/files/download/token脚本工作正常并下载PDF。

我可以使用标准链接标记将人们发送到该页面,但是一旦文件下载,我需要更新该页面上通过该下载脚本返回的内容。

有没有办法让ajax调用打开一个新窗口,文件将下载,然后返回我需要更新当前页面的数据?

下载脚本还有更多内容,但主要部分是实际的下载部分:

 header("Content-type: application/pdf"); 
 $this->load->helper('file');
 readfile("static/temp_statements/".$local_file_name);
 unlink("static/temp_statements/".$local_file_name);

1 个答案:

答案 0 :(得分:5)

我过去使用的一个可能对你有用的技巧是

  • 在ajax调用中提供查询参数以下载PDF。这将是一个独特的名称。
  • 流式传输PDF以供下载的服务器进程使用此唯一名称设置cookie。
  • 您在页面中轮询等待此Cookie显示。
  • 当Cookie出现时,您可以认为该文件已下载,您可以执行或有操作。

而且您无需打开窗口即可实现此目的。你可以像这样附加一个不可见的iframe:

$(some selector).append($("<iframe width='1' height='1' frameborder='0' src='" + url + "'></iframe>"));

为了诚实和透明,我最初从这个SO答案中找到了这个想法,它对我有用:Detect when browser receives file download