前言:
在項目開發(fā)中用到了異步文件上傳屯换,并返回文件上傳的狀態(tài),由于之前使用的是form表單進行文件的上傳,不能實現(xiàn)該需求癣防,所以使用了ajaxfileupload.js進行開發(fā)掌眠。
有些小伙伴沒有耐心看到最后,那就直接告訴你們結果吧蓝丙,替換這個版本的ajaxfileupload.js就可以解決這個問題渺尘!
ajaxfileupload.js下載地址(這是本人已經修改過的,可以正常解析data):
開發(fā)準備:
ajaxfileupload.js下載地址:http://download.csdn.net/download/m0_37770508/10107675
具體使用步驟:
1鸥跟、在頁面中引入ajaxfileupload.js
<!-- 文件上傳ajax -->
<script src="../static/js/ajaxfileupload.js "></script>
2医咨、為文件上傳按鈕添加onclick事件
<button type="button" id="uploadButton" class="btn btn-default" disabled="false" onclick="ajaxFileUpload()">上傳</button>
3、編寫調用方法
function ajaxFileUpload() {
????var newly_title = $("#newly_title").val();//此為傳遞參數(shù)拟淮,視需求編寫 ??? //核心部分如下!=浅妗N臁: ??? ????
? ? $.ajaxFileUpload({
????????url: "/upload?newly_title="+newly_title,//請求后臺方法 ???????
????????type: 'post',?????????????????????????? //選擇提交方式get/post ???????
????????secureuri: false,?????????????????????? //是否啟用安全提交,默認為false ???????
????????fileElementId: 'file',????????????????? html中文件提交按鈕的id ? ? ? ? ?
????????dataType: 'text',?????????????????????? //數(shù)據(jù)提交類型:text粉楚、json亮垫、jsonp等 ???????
????????success: function (data) {???????????? ?//請求返回后對數(shù)據(jù)的處理 ???????????
? ? ? ? ????if(data=="success"){ ??????????????? ????????????????
????????????????$("#success").modal('show'); ???????????????
????????????????$("#upload").modal('hide'); ???????????????
????????????????setTimeout('location.reload()',1000); ???????????
????????????}else{ ???????????????
????????????????$("#fail").modal('show'); ???????????????
????????????????$("#err_message").text(data); ???????????
????????????} ???????
????????} ???
????});
}
4、使用中常見的錯誤以及解決辦法
①返回data不能進行正常解析:
如果在ajax的dataType設置為非text類型時燃异,ajaxfileupload返回的data
并非為json格式继蜡,而是在json外層包裹了一層<pre>標簽逛腿,導致不能正確解析該json仅颇。具體解決辦法如下:
(修改ajaxfileupload.js源碼,若不想修改可直接下載上面鏈接中的我自己使用的已經修改過的ajaxfileupload.js)
:將ajaxfileupload.js中的:
if ( type == "json" ) { eval( "data = " + data); }
替換為:
if ( type == "json" ){ data = jQuery.parseJSON(jQuery(data).text()); }
(直接處理前臺返回的數(shù)據(jù)搁廓,利用正則表達式)
var reg = /(.+)<\/pre>/g;
var result = data.match(reg);
data = RegExp.$1;
②ajax請求返回后執(zhí)行error操作(報錯為)
正常操作耕皮,可ajax返回進入error中。有可能因為jquery版本和ajaxfileupload.js的版本兼容問題凌停,還有一種原因是由于請求返回非json值有關罚拟。具體解決辦法如下:
(版本問題,報錯為:jQuery.handleError is not a function)
由于ajaxfileupload.js是在jquery1.4.2版本之前寫的赐俗,Jquery之后的版本已經沒有了handleError方法,所以可以將1.4.2版本中的該方法復制到該js中。
(返回非json格式數(shù)據(jù)問題)
解決辦法參照①中即可
擴展:
ajax中的dataType中的json和jsonp類型的區(qū)別和聯(lián)系:
http://www.cnblogs.com/iovec/p/5312464.html
ajaxfileupload.js下載地址(這是本人已經修改過的吉捶,可以正常解析data):