【问题标题】:detect form submission finish with jquery用jquery检测表单提交完成
【发布时间】:2011-07-29 14:31:30
【问题描述】:

据我们所知,您无法通过 ajax 创建文件下载。

但是,您可以提交会创建下载提示的表单。

当用户按下按钮时,我会生成一个相当大的文件,因此我会显示“请稍候”样式的消息。

我的问题是,

如何检测表单提交何时完成,从而显示对话框?

(这是为了隐藏消息)

【问题讨论】:

  • 谁说不能用 ajax 下载文件?
  • 好的,您可以使用 iframe 等进行很多棘手的工作,但我的意思是您可以只执行 ajax 请求并获得下载提示,以显示下载响应,因为浏览器安全...
  • 不是我要问的,我有提示出现,无论使用哪种方法,我的问题都保持不变,我怎么知道提示何时实际出现,因此请求有完成了吗?
  • 对“提示”是表单生成有点困惑?这是 javascript 提示符吗?
  • 只是浏览器文件下载。其效果与您在浏览器中输入指向 .exe 文件的 url 相同。

标签: php jquery ajax forms


【解决方案1】:

表单提交成功后进行重定向。如果重定向将命中浏览器无法显示的文件 - 它将开始下载。

在我的例子中,我从表单提交处理程序返回 JavaScript 代码,该处理程序是表单小部件 eval()s。该代码可能是对后端刚刚生成的罚款的重定向。

也许我关于 AJAX 表单最佳实践的博文会有所帮助: http://agiletoolkit.org/blog/forms/

如果你想让事情变得简单,那么:

  1. 添加 form.onSubmit 处理程序,它应该防止默认操作,收集表单数据并发送到服务器。你可以使用一些用于 jQuery 的 ajax 提交插件。
  2. 服务器应解析数据、准备文件并将文件名发送回浏览器。
  3. 您的 JS 代码在传输完成时执行(回调)并通过 document.location 重定向到文件。

Agile Toolkit 中就这么简单:

$f=$p->add('MyForm');
if($f->isSubmitted()){
    $f->js()->univ()->location(prepare_file($f->getAllData()))->execute();
}

【讨论】:

    【解决方案2】:

    也许你应该尝试这样的事情

    http://www.iamkumaran.com/xdownloader-a-flash-javascript-library/

    查看演示文件下载的工作原理,希望对您有所帮助。

    【讨论】:

    • bad link...也用flash吗?
    • Flash 已弃用
    猜你喜欢
    • 2011-08-03
    • 2012-01-12
    • 1970-01-01
    • 2012-04-29
    • 2011-01-13
    • 2013-01-15
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    相关资源
    最近更新 更多