1

全部,

我有一个包含表单的 HTML 页面。

当用户完成表单并单击“提交”时 - 表单将用户的输入发布到 PHP 页面。

该 PHP 页面处理输入并将用户的结果作为附件返回。

到目前为止 - 一切正常 - 用户单击“提交”,浏览器的进度条开始“旋转”,几秒钟后,附件被下载。

但是,在浏览器中 - 用户仍然在表单页面上。我没关系。

所以 - 这是我的问题。理想情况下,当用户单击“提交”时 - 我想更新表单页面以指示“过程”正在进行中。例如,

  • 禁用提交按钮以防止重复点击
  • 显示“正在下载”消息和“微调器”类型的图形

然后,当下载完成时 - 我想捕获该事件,以便我可以重新启用提交按钮并删除下载消息。

这可能吗?

或者 - 我的初始设置是错误的吗?有一个更好的方法吗?(即——有一个调用PHP页面的表单,让PHP页面返回一个附件,然后将控制权返回给调用页面?)

提前感谢您的建议和见解!

4

4 回答 4

1

我不确定是否会有任何关于通过 http 下载/流式传输文件的事件(考虑到它完全发生在服务器端),但是,如果我是你,我会将表单重定向到下载页面,然后在 web 服务器之后开始将文件流式传输到客户端的浏览器,我将再次重定向回表单页面。

您可以通过 PHP 和 Javascript 来实现。:)

于 2012-09-10T13:53:57.407 回答
1

使用 javascript 在新窗口中打开下载。所以不要在 POST 请求中返回下载,只需让页面重新加载并在页面上放置一些 javascript,这将打开一个新窗口,该窗口将调用您的 PHP 脚本来下载文件。

于 2012-09-10T13:55:19.533 回答
1

为了获得这种功能(禁用提交按钮、显示微调器或进度条),您需要使用一些 JavaScript。我会推荐 JQuery Ajax 表单插件: http: //www.malsup.com/jquery/form/

使用 JS 和 AJAX 的棘手部分是很难让用户将文件作为附件下载。

要使用纯 HTML 和 PHP,我建议在提交时重定向到另一个页面,显示一些消息(...“处理中”...),然后重定向回页面将加载的表单页面,提示下载,然后再次显示表单。

于 2012-09-10T13:55:44.563 回答
1

处理此问题的一种优雅方式可能是通过 ajax。

a)在您按下“提交”按钮时的最后一页上,您将 ajax 请求发布到

  1. 动态构建文档和/或生成下载文档的链接
  2. 在ajax响应中返回下载链接

b) 在 ajax 响应中,您触发下载链接,例如

 //jquery code     
$.ajax ({...
        success:function(resp){
            window.open(resp.FILE);
            // to the rest of work here 
            // e.g enable disable submit button 
        })
于 2012-09-10T14:07:24.437 回答