【问题标题】:File Download Operation By AjaxAjax的文件下载操作
【发布时间】:2014-06-14 18:19:23
【问题描述】:

需要下载一个动态生成的文件(根据用户输入)...

我一直在使用 mPDF(php 模块来创建 pdf 文件)。

gen.php

require("./MPDF56/mpdf.php");
$mpdf=new mPDF();
$mpdf->WriteHTML('<p>Hallo World</p>');
$mpdf->Output('filename.pdf','I');

此脚本完美运行。输出方法可以有几个选项 Like

'F' : to save pdf to local.
'S' : to return file as string.
'D' : to download the file.
'I' : force download... plug-in if available.

http://mpdf1.com/manual/index.php?tid=125

每当浏览器读取 gen.php。 pdf文件将被下载。正如我所说,它工作得很好......

直到,我尝试使用 ajax 来做到这一点。

这个脚本...

$.ajax({
  type:           'POST',
  cache:          false,
  url:            './gen.php',
  data:           JSON.stringify(inps),
  contentType:    'application/json',
});

触发 gen.php。 PDF 文件已创建。但是,文件不会发送到浏览器。

如果我将它添加到 ajax 部分...

success: function(response){
  $("#result").html(response);
}

Document 以字符串形式接收文件。 我尝试了 mPDF.OUTPUT 函数的所有选项。没有结果。

我想了一个解决办法,但我不知道如何实现它。

Ajax 需要在发送数据时打开一个弹出窗口。所以文件下载操作将在另一个标签下完成。

或者也许。我可以尝试打开一个不可见的 gen.php iframe 并在创建 i 框架后发送数据...

任何建议都会有所帮助。

很快

ajax 如何调用 php 文件(即下载文件)。发送必要的数据后。

【问题讨论】:

  • 这是对我问题的高度评价。让我澄清一下; ajax发送数据后是否可以打开一个新窗口。
  • 啊,这有帮助。简短的回答是的。但是为了更大的图景,您是否需要先将信息发送到服务器?我在您的代码中没有看到它。 inps 是什么?
  • inps 是一个多维数组(带有 key->val 对),其中包含表单中的所有输入。 gen.php 使用该数组生成一个pdf文件并将其发送到浏览器。(它需要)
  • 可以进入 URL 并执行window.location='gen.php?key1=value1&amp;key2=value2' 吗?而不是使用 AJAX。

标签: javascript php jquery ajax pdf


【解决方案1】:

我认为这篇文章标题中提出的问题在这里得到了回答:Download a file by jQuery.Ajax

但据我了解,可能有一种更简单的方法可以实现您的目标。如果您需要向gen.php 脚本发送信息,并且您担心为准备 PDF 而发送的数据大小以及 HTTP GET 如何处理该问题,请改用 FORM POST:

<form action="gen.php" method="post">
    <input type="text" name="X">
    <input type="text" name="Y">
    <input type="text" name="Z">
    <input type="submit" value="Download">
</form>

如果 mPDF 以适当的标题响应,我希望它会这样做,则主页不会重新加载,但文件会发送到浏览器以供下载。

【讨论】:

  • 我的理解是。此表单将通过 javascript(根据 inps 数组)构建并发布到 gen.php。那么数据将通过 POST 发送,而 gen.php 将用传统方式完成其余的工作吗? .没有 ajax 或任何动态的跨端脚本?
猜你喜欢
  • 2023-03-09
  • 2019-09-20
  • 1970-01-01
  • 2012-11-26
  • 2013-01-29
  • 2012-10-29
  • 1970-01-01
  • 2019-10-29
  • 1970-01-01
相关资源
最近更新 更多