Javascript 上传表单提交是否可以等待文件处理完成?

Javascript 上传表单提交是否可以等待文件处理完成?,javascript,jquery,python,forms,web2py,Javascript,Jquery,Python,Forms,Web2py,上传表单提交是否可以等待文件处理完成 我使用web2py及其sqlform上传视频,同时将视频转换为flv。上传和编码的进度都通过两个进度条显示,使用此代码(http://www.web2pyslices.com/slice/show/1337/upload-progress-in-web2py). 一旦检测到视频上传,编码将在后端开始。编码和转换完成后,用户可以播放转换后的视频 问题是当上载完成但编码未完成时接受的表单。我尝试了event.preventDefault(),但进度条不显示。似乎

上传表单提交是否可以等待文件处理完成

我使用web2py及其sqlform上传视频,同时将视频转换为flv。上传和编码的进度都通过两个进度条显示,使用此代码(http://www.web2pyslices.com/slice/show/1337/upload-progress-in-web2py). 一旦检测到视频上传,编码将在后端开始。编码和转换完成后,用户可以播放转换后的视频


问题是当上载完成但编码未完成时接受的表单。我尝试了event.preventDefault(),但进度条不显示。似乎在上传完成时无法停止默认提交。如何防止提交并等待转换过程完成,然后再进行提交?谢谢

无需插入数据库即可验证表单(请参阅)。然后在验证之后,运行一个循环来持续检查编码是否完成,一旦编码完成,就执行数据库插入和返回

def video_upload():
    upload_form = SQLFORM(db.encodeupload)
    if upload_form.validate():
        session._unlock(response)
        [while loop checking to see if file encoding is complete]
        db.encodeupload.insert(**db.encodeupload._filter_fields(form.vars))
    [rest of code]
在while循环中,您还可以检查编码过程中的错误,并在这种情况下中止插入(并返回错误消息)


注意,
session.\u unlock(response)
在进入循环之前解锁会话文件——这是必要的,这样锁定的会话文件就不会阻止页面为更新编码进度条而发出的Ajax请求。在Ajax请求调用的控制器操作中,您还应该添加
session.forget(response)
,这样操作就不会锁定或写入会话。

感谢您的回复。我尝试了这一点,并使用了db.encodeupload.insert(**form.vars)行发生错误:字段video_newfilename不属于该表。我猜video_newfilename是编码后上载文件的名称(相应地web2py会自动获取上载文件的原始名称并编码为新文件名)。我没有干预这个过程。为什么会出现此错误?抱歉,form.vars必须首先进行筛选,以便它只包含属于表中的字段——为此,我更正了上面的代码。在书中,并举例说明这一点。