web2py ajax()函数是否真的适用于<input type =“file”/>的onchange事件?

时间:2014-11-24 22:34:40

标签: html ajax forms file-upload web2py

在我的web2py应用程序中,我需要在上传之前处理<input type="file" />字段中的文件名。此处理将使用正则表达式分析文件名,并在允许用户提交表单之前填写其他表单字段。

我的第一步是获取文件名以便处理它。直到现在,我没能得到它。根据我对web2py文档的解释,我发现ajax()函数应该可以解决问题。

这是我的代码块。 视图:

<form>File to upload:
    <input name="zefilename" type="file" onchange="ajax('{{=URL('default', 'analyse_version_data')}}', ['zefilename'], 'target')"/>
    <!-- Other fields go here -->
    <div id="target"></div>
</form>

控制器:

def analyse_version_data():
    filename = request.vars.zefilename
    return P(filename)

如果我的输入类型不是type="file",那么它就像魅力一样,输入值显示在目标div中。

但如果type="file"存在,我就无法得到任何东西。 request.vars保持空白:<Storage {'_vars': <Storage {}>,...

我可能遗漏了一些东西,但我无法弄清楚是什么......

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您的代码正在尝试通过Ajax发送整个文件,而不仅仅是发送文件名。要仅发送文件名,请不要使用ajax()函数的第二个参数,而是将文件名添加到Ajax URL的查询字符串中:

<form>File to upload:
    <input name="zefilename" type="file"
           onchange='ajax("{{=URL('default', 'analyze_version_data')}}?filename=" +
                          encodeURIComponent(jQuery(this).val()), [], "target");' />
    <!-- Other fields go here -->
    <div id="target"></div>
</form>

控制器:

def analyse_version_data():
    return P(request.vars.filename)