在ajax还没有流行起来的时候,因为表单使用form的action进行页面跳转提交,所以不存在什么问题。
自从ajax流行起来之后,一般的表单都是通过ajax方式提交,所以碰到带文件上传的表单就比较麻烦。后来在网上查了一下,基本都没有比较好的解决办法,所以还是对这种特殊的表单使用页面跳转方式提交。最近看到同事用一种伪ajax方式解决了此问题。其基本原理就是在页面增加一个隐藏iframe,然后通过ajax提交除文件之外的表单数据,在表单数据提交成功之后的回调函数中,通过form单独提交文件,而这个提交文件的form的target就指向前述隐藏的iframe。代码如下(注意form的target属性指向隐藏的iframe):
<form style="padding:0px;margin:0px;" target="upload" action="/xxx/xx.do" id="uploadForm" name="uploadForm" encType="multipart/form-data" method="post">
<input type="file" id=""attachFile/>
</form>
<iframe name="upload" style="display:none"></iframe>
上述伪ajax方法的缺点是,表单数据和文件数据不能做到一个事物里面,如果后面文件上传失败(比如网络中断、服务器down掉等),则前面上传的表单数据算是垃圾数据了。当然这个在对数据一致性要求不是很高的环境,还是不错的解决办法。
posted on 2009-11-06 23:10
岁月如歌 阅读(3031)
评论(2) 编辑 收藏 所属分类:
java