Ajax 傳遞json字串到客戶端時報 Internal server error
阿新 • • 發佈:2019-02-09
jQuery.ajax({ url: 'business/xxxx!xxxx.action', data: 'id='+id, type: 'POST', dataType:"json", beforeSend: function() { }, error: function(XMLHttpRequest, textStatus, errorThrown) { alert(errorThrown);//前臺打出:internal server error alert(request.status);//前臺打出: 500 alert(request.readyState);//前臺打出:4 alert(textStatus);//前臺打出: 空字串 }, success: function(response) { var jsonObj = eval("("+response.jsonStr+")"); } });
後端關鍵程式碼(省略查資料庫的部分,很簡單,就是將轉換好的json字串賦值給Action裡的某個變數):
this.setJsonStr(jsonStr);
問題來了,
當jsonStr資料內的某個屬性值比較大的時候,在這個案例裡是超出了3000個字元(一箇中文算三個字元),
而且含有大量中文時,前端會報錯,注意,是“資料大“+”大量中文“這兩個條件同時滿足才會出現該問題。
總之,這種情況下就前臺就會打出internal server error ,錯誤碼是500。
按理說3000多個字元並不大,並且所謂的大量中文,算了下大概佔1800個字元吧(乘以3之後),
目前還不知道根本原因是什麼。有知道的歡迎留言~
解決方案:
前端-->ajax請求的dataType改為: ”text",
獲取json物件改為:var jsonObj = eval("("+response+")");
後端--> 把方法的返回值從String改為 void,簡單的說就是不用struts2自帶的傳值方式,關鍵程式碼如下:
this.getServletResponse().setContentType("text/html;charset=UTF-8"); super.getServletResponse().getWriter().write(jsonStr);
當然規範的寫法最後是要關掉/釋放 PrintWriter 的。