最近項目涉及到附件上傳就頭痛,一直在用plupload插件在做。。。ie9偶爾抽風但還是可以的。。。
然后有個需求,表格每行都有個上傳按鈕,
頁面多上傳按鈕。
一、開始的時候,用plupload做的,多實例上傳
將browse_button觸發按鈕,設置成數組,這種方法也可以實現上述需求,但是ie9沒反應,,,我不知道什么也不知道。。。
打印了一下,ie9 的runtime是html4,然后把上傳方式調換了順序,沒用。。。
上傳附件的時候,只執行了FilesAdded方法,不懂不懂
this.pluploader = new plupload.Uploader({ runtimes: 'html5,flash,silverlight,html4', //上傳方式 headers: {Accept: 'application/json; charset=utf-8'}, browse_button: arr, //觸發按鈕 url: this.uploaderUrl, flash_swf_url: '../common/lib/plupload/Moxie.swf', //flash上傳組件的地址 silverlight_xap_url: '../common/lib/plupload/Moxie.xap', multi_selection:false,//不可選擇多個文件同時上傳 filters: { max_file_size: '50mb' //限定文件大小 // prevent_duplicates: true, //是否允許選取重復文件,默認false為允許 } });
以后我知道原因會更新的。。。
二、無奈,換了ajaxSubmit來做上傳,這個方法很久前被我拋棄了,因為在ie9,ajaxSubmit請求返回數據成功,但是不執行success回調函數。
今天終於找到原因了,是返回數據的數據類型問題,ie9返回的數據是json字符串,不是對象。心累。
設置請求參數 dataType:'text',就可以進入success,將數據類型JSON.parse()轉成對象就行了。
this.$el.find("form"+'.'+targetClass).ajaxSubmit({ url: this.uploaderUrl, contentType: "application/x-www-form-urlencoded; charset=utf-8", dataType:'text', enctype:"multipart/form-data", method:"POST", type:"POST", data:obj, success: $.proxy(function (result, status) { if(typeof(result)==='string'){ result = JSON.parse(result) } if (result.success) { //上傳成功 } else {} },this),
error:function(res) {} });
