問題: 今天做了一個前臺通過按鈕異步提交到後臺獲取json串的例子並在前臺的回調函數中接受對應的值。但是死命不行,糾結了好久
下面是我的例子:
html部分:
<span style="font-size:18px;"><script type="text/javascript">
function jqjson(){
$.post('abcJq',{status:0},function(result){
alert(result.json1);
location.reload();
},'json');
}
</script>
<input type="button" οnclick="jqjson();" value="jq"></span>
servlet部分:
<span style="font-size:18px;">public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String status = request.getParameter("status");
out.print("{'json1':'狀態'}");
// out.print("{json:'狀態'}");
out.flush();
out.close();
}</span>
在servlet中不管是用上面註釋的和不註釋返回的結果都不能進入到回調函數,我就納悶了!
於是我就想這用Gson來封裝下返回json串看可以不:
修改後的servlet
<span style="font-size:18px;">public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String status = request.getParameter("status");
Gson gson = new Gson(); //這個Gson對象在Gsonjar包中要自己額外導入
HashMap<String,String> map = new HashMap<String,String>();
map.put("json1", "狀態是0");
String json = gson.toJson(map);
out.print(json);
out.flush();
out.close();
}</span>
讓人意外的是這個靜然就可以成功的調用回調函數;返回正確的值。
於是我就調試發現用Gson返回的json串的格式是{"json1":"狀態是0"}
我就很納悶了這個和我自己寫的{'json1':'狀態是0'}有什麼差別,這裏用的是單引號,因爲out.print("{'json1':'狀態'}");
爲的是外面已經用了雙引號了,所以才用單引號。
難道是這個問題,於是我就改寫了寫法servlet如下:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String status = request.getParameter("status");
out.print("{\"json\":\"狀態\"}");
out.flush();
out.close();
}
奇蹟般的就可以了,太搞了。