1. 程式人生 > >解決IE系列瀏覽器上傳頁面接收問題

解決IE系列瀏覽器上傳頁面接收問題

引用:在網上看見一個說程式設計師的致命缺點中: 第四點就是大部分的程式設計師是一種資訊囤積型的程式設計師,說直接一點就是狹隘,主要體現就是在知識的共享上面,非常害怕將知識全部告訴了別人,自己的存在價值就會大打折扣,這些主要是老員工居多,他們經常會隱藏程式碼,不願意公佈程式碼。小心翼翼地避免訪問記錄,也許這類的程式設計師很樂意告訴你他的工作是多麼了不起,多麼的厲害,但是如果你想要知道他的程式碼估計會很難。最終,他們註定要失敗,這樣的做事行為不被別人接受,存在也是沒價值的.

在加上在網上 搜尋資料的感受現將最近解決的一個IE方面的問題分享給大家.

技術分享:IE中上傳檔案時經常出現後臺上傳成功,但返回到前臺的資料要麼接收不到,要麼提示下載json檔案,在IE7及以上版本瀏覽器測試通過

在苦苦查詢資料無果後終於在昨天突發靈感想到一種解決方法,試了一下在IE系列瀏覽器上面都可以使用操作也非常的簡單,現將程式碼和實現方法記錄下來分享給大家.

在java後臺中在儲存完檔案後返回到前端的資訊使用HttpServletResponse response直接寫在流裡面,這樣返回的資料就不會經過spring等前端框架處理,方法本身使用void即可不需要返回型別,因為經過處理後的返回型別導致在ie中不能正常接收到資料,而在前端ajax中也可以正常接收到資料,只不過接收到時json字串,需要手動轉換後就可以變成一個json陣列.

java程式碼:public void writeJson(HttpServletResponse response,String msg) throws IOException {
ResultInfo info=new ResultInfo(true,msg);
JSONObject json=JSONObject.fromObject(info);
response.setContentType("text/html;charset=utf-8");//可以不用寫
response.getOutputStream().write(json.toString().getBytes());
}

js程式碼:$.ajaxFileUpload({
  url:url,
  secureuri:false,  
    fileElementId:'file',                        //檔案選擇框的id屬性或者name名稱
    dataType: 'JSON',                                     //伺服器返回的格式,可以是json  
    success: function (data, status) {
   data=$.parseJSON(data); 
   $("#servId").val(data.msg); 
  return true;
  },
  error:function(data, status, e){ 
            return false;
  }
});

在java程式碼中使用了一個物件將資料封裝後轉換為json進行寫出,主要是因為在ajax中接收返回的資料有固定的格式,{"error_code":0,"msg":"5992","success":true}其中succes是在ajax系列接收中判定是否能夠進入到success的關鍵,很多時候IE接收的資料如果沒有這個屬性就會進入到error中,所以在java程式碼中才會專門建一個物件用來封裝資料.在其它非IE核心不會出現這種情況.如果需要返回一個已經存在的物件只要物件中沒有error這個屬性就能進入到success裡面,所以在不一定非要按照我的程式碼寫,java程式碼中物件主要是返回單個數據例如檔案上傳位置,id之類的.如果需要返回其它資料最好的選擇是組成json字串進行返回.

在js程式碼中由於接收到資料是一個字串,需要將其轉換成json物件後才可以正常使用.