【问题标题】:Is this set up possible to enable file download on a ajax call in PHP?这种设置是否可以在 PHP 中的 ajax 调用上启用文件下载?
【发布时间】:2014-07-06 13:31:17
【问题描述】:

我绝不是网络开发人员。我在 GWT 上工作了一点。我们曾经在那里进行过这种设置。由于所有东西都是 ajax,每次我们进行服务器 RPC 调用时,我们都会显示一个进度条,当响应返回时,我们会在 rpc/ajax 的回调中关闭它。

现在我正在开发一个尝试在 PHP 中执行此操作的工具(我仍在学习)。我有一个看起来像这样的设置,

1:有一个html表单,里面有几个字段。我在这里实际上需要一个文件上传选项,但例如,假设有两个文本字段。

2:当用户提交表单时。我想进行一个 post ajax 调用来说 test.php,同时显示一个进度条出现(基本上阻止整个页面,但也不刷新页面)。当ajax响应来时,我会关闭进度条。

3:现在,如果服务器返回一些文本,很容易处理,我可以在 ajax 回调中使用 document.getElementById 处理它。但就我而言,我要做的是,我想用 post 参数做一些处理服务器端,创建一个文本文件并返回它。然后回到客户端并关闭进度。

我编写了一个示例脚本,它通过设置标题返回一个文件

header('Content-Description: 文件传输');
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename='.$file);

所以这个 php 文件独立工作正常,当我在浏览器中打开它时,它会抛出一个下载链接。当我尝试通过 ajax 请求调用它时,它不会返回任何内容。

如果这种方法不正确,谁能告诉我?

【问题讨论】:

  • 因为 AJAX 意味着一个在后台的请求,除了发起请求的脚本之外,不可能得到响应——因此没有下载/“将弹出另存为”对话框,因为处理响应是您的脚本的责任。解决方法是在脚本中创建一个数据 URI 并将其分配给location.href 以触发下载对话框,或者让服务器在 second 请求上输出实际下载数据,使“正常”方式(通过将location.href 指向使服务器传送数据的 URL 来启动)。

标签: php ajax


【解决方案1】:
<script>
    window.open("filedownload.php, '_self', false);
</script>

将提示用户下载文件而不导航到新页面。

浏览器将处理下载进度显示。这是用户熟悉的体验。

如果您希望在 ajax 请求完成时下载文件,请将上述代码添加到 XMLHttpRequest 回调

【讨论】:

    猜你喜欢
    • 2013-09-30
    • 1970-01-01
    • 2014-05-27
    • 2011-10-03
    • 2020-10-12
    • 2014-03-18
    • 1970-01-01
    相关资源
    最近更新 更多