問題現象是這樣的:我的後臺servlet程序發生異常時,我想捕獲異常返回給用戶友好的信息,在ie8下通過F12調試“網絡”-“捕獲”發現請求的狀態是“掛起”,然後瀏覽器就掛了。
後臺代碼:
@Override public void doPost(HttpServletRequest request, HttpServletResponse response) { log.error(e.getMessage(), e.getCause()); PrintWriter writer; try { writer = response.getWriter(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String errorText = ""; // some code ... writer.println("{\"success\":\"N\",\"msg\":\"" + errorText + "\"}"); writer.flush(); } catch (IOException e1) { log.error("連接出錯,無法寫響應: " + e1.getMessage(), e1.getCause()); }
前臺代碼:
// 上傳ajax提交 $('#form_upload').ajaxSubmit({ url: url, type: 'post', //dataType: 'json', dataType: 'text', async: false, success: function(dataText) { //some code... }, error: function(XMLHttpRequest, textStatus, errorThrown) { }, complete: function(xhr) { } });
這個功能是導入excle文件的,在ie10、火狐下沒問題,但是ie8 9都不行,開始我以爲是js庫的問題,把jquery、jquery form的版本都換了,問題沒解決。又懷疑是ie8下iframe的問題,鼓搗半天還是不對。最後通過ie的F12發現,響應有內容,沒有頭,原來是服務器沒有寫響應頭,導致ie8無限掛起進入永恆。。。
解決:servlet代碼加上下面三句即可了
response.setStatus(200); response.setContentType("text/html;charset=UTF-8"); response.setCharacterEncoding("UTF-8");