有没有简单的方法可以通过输入类型="文件"?从.load视图向我的控制器发送文件?或者有没有办法用JQuery做到这一点?
答案 0 :(得分:0)
默认情况下,Ajax LOAD()
组件中的表单将被捕获并通过Ajax提交。但是,用于提交的方法不适用于文件上载。相反,您可以通过向表单元素添加“no_trap”类并设置自己的表单提交处理程序来覆盖默认行为。
在包含表格的视图中:
<form id="upload_form" class="no_trap">...</form>
或者如果表单是在控制器中生成的:
form = SQLFORM(..., _id='upload_form', _class='no_trap')
在包含该组件的视图中,添加一个明确的“目标”(供以后参考):
{{=LOAD('mycontroller', 'myfunction.load', ajax=True, target='upload_form')}}
要处理文件上传,您可以使用FormData
API。有关一些想法,请参阅http://blog.teamtreehouse.com/uploading-files-ajax。您也可以考虑使用库,例如jQuery File Upload。
构建FormData
后,您可以按如下方式发布到web2py:
$.web2py.ajax_page('post', url, formData, 'upload_form', form)
其中url
是Ajax组件的URL,formData
是您通过表单提交处理程序构造的FormData
对象,form
是jQuery表单对象(即$('form#upload_form')
)。这会将表单数据发布到URL,并将“upload_form”目标替换为返回的HTML。