【问题标题】:ready event on a posted form已发布表单上的就绪事件
【发布时间】:2009-11-16 19:02:39
【问题描述】:

我在 iframe 中有一个表单,当发布此表单时,会向用户返回一个文件(基于表单信息)。该文件使用 content-disposition:attachment 返回,因此只显示文件保存对话框。一旦文件返回给用户,我想在 javascript 中做一些事情。我尝试附加一个 $(iframe).ready();表单发布后到 iframe,但它会立即消失。

值得注意的是: $(iframe).load();也不起作用,它永远不会被触发。 表单帖子在技术上是 iframe 的第二次加载(第一次加载在 iframe 中显示表单)。

有什么想法吗?

【问题讨论】:

    标签: jquery forms iframe content-disposition ready


    【解决方案1】:

    唯一想到的是不要立即将文件发送回用户,而是输出一个 HTML 框架,它 1. 执行 Javascript 和 2. 完成后,重定向到下载文件(可能带有额外的 重定向以确保它成功)。除此之外,我认为您在执行 Javascript 的同时交付下载文件的机会不大。

    【讨论】:

    • 这不会像我需要的那样工作,文件的处理可能需要 30 多秒。当触发下载时,我设置了一个处理函数,当下载“准备好”时,我想结束处理函数并为用户提供一些额外的信息。
    • 为什么不将文件保存在临时位置(而不是直接输出)并在显示信息后将用户重定向到那里?
    • 这可能行得通,它至少可以让我结束处理功能并通过中间页面显示添加信息。不过,在服务器端保存所有这些文件时,我担心可伸缩性。
    • 我明白了。唯一想到的另一件事是将进程拆分为 iframe,并拥有第二个 iframe,不断轮询处理是否完成。到时会显示信息,同时在另一个iframe中会弹出下载对话框。
    【解决方案2】:

    您可以尝试在表单提交后在 iframe 回调中添加一些脚本,以在父窗口中运行一个函数?

    父窗口

    function test(){
     alert('Success!');
    }
    

    回调 iFrame

    $(window).load(function(){
     parent.test();
    })
    

    【讨论】: