專案遇到的怪問題,紀錄一下解決方法
(後來發現其實是很基礎的Spring Controller回傳字串的方法)
狀況是這樣的
我使用Spring MVC架構
在前端建立一個按鈕
按下去會使用Ajax到後端去查DB狀態
然後傳對應字串回前端
雖然後端功能執行沒問題
但最後return result時卻跑進Ajax的error區
查了一下後發現
連回傳字串都要特殊處理
而回傳json更還要導入jar檔(jackson之類的)
設定過後才能解析json格式
(真的是令人......,反觀C#真的好方便......)
因為不想導入jackson去設定一堆有的沒的(之後再學XD)
所以就查到了PrintWriter這個用法
程式碼如下:
JSP:
function checkStatus(){
var seqNo = $("#seqNo").text(); //清單編號
var url = "custTagDataAdd.do?action=checkStatus";
var data = {"seqNo" : seqNo};
$.ajax({
url: url,
type: "POST",
data: data,
error: function (jqXHR, textStatus, errorThrown) {
alert("查詢功能發生問題,暫時先關閉功能,請稍後再試");
$("#checkStatus").attr("disabled","disabled");
},
success: function (result) {
alert(result);
}
});
}
Controller:
public void checkStatus(HttpServletRequest req, HttpServletResponse res) {
String seqNo = req.getParameter("seqNo");
service = this.getService();
String checkStatus = service.checkStatus(seqNo);
String result = "";
if(checkStatus.equals("S")) {
result = "正在上傳資料中";
}else if(checkStatus.equals("C")) {
result = "資料已上傳完成";
}else if(checkStatus.equals("E")) {
result = "系統發生錯誤,請重新上傳";
}else {
result = "系統發生錯誤,請稍後再試";
}
res.setCharacterEncoding("UTF-8");
PrintWriter pw;
try {
pw = res.getWriter();
pw.print(result);
pw.flush();
pw.close();
} catch (IOException e) {
log.info(e.toString());
}
}
簡單來說,在HttpServletResponse中取得裡面的writer
就可以在裡面寫入要傳回去的東西
除了print之外可以使用println換行
response.getWriter會在前端直接輸出數據
輸出後不會刷新頁面,用來配合Ajax蠻剛好的
以後可能會常用這個方法吧
補充一下
基本上寫入PrintWriter時
會使用write這個方法
但這個方法只能輸入char或string類的字符字串
所以改用print這個方法
print可以將輸入的東西轉換成bytes再用write輸出