在ajax還沒有流行起來的時候,因為表單使用form的action進(jìn)行頁面跳轉(zhuǎn)提交,所以不存在什么問題。
自從ajax流行起來之后,一般的表單都是通過ajax方式提交,所以碰到帶文件上傳的表單就比較麻煩。后來在網(wǎng)上查了一下,基本都沒有比較好的解決辦法,所以還是對這種特殊的表單使用頁面跳轉(zhuǎn)方式提交。最近看到同事用一種偽ajax方式解決了此問題。其基本原理就是在頁面增加一個隱藏iframe,然后通過ajax提交除文件之外的表單數(shù)據(jù),在表單數(shù)據(jù)提交成功之后的回調(diào)函數(shù)中,通過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方法的缺點是,表單數(shù)據(jù)和文件數(shù)據(jù)不能做到一個事物里面,如果后面文件上傳失敗(比如網(wǎng)絡(luò)中斷、服務(wù)器down掉等),則前面上傳的表單數(shù)據(jù)算是垃圾數(shù)據(jù)了。當(dāng)然這個在對數(shù)據(jù)一致性要求不是很高的環(huán)境,還是不錯的解決辦法。
posted on 2009-11-06 23:10
歲月如歌 閱讀(3049)
評論(2) 編輯 收藏 所屬分類:
java