【发布时间】: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 来启动)。