Servlet如何擷取ajax中以json格式傳入的資料?__js
來源:互聯網
上載者:User
$('#but_json_json').click(function(){
var j ={"name":"王","password":123456};
$.ajax(
{
url:"servlet/JsonObject", //訪問路徑
type:"POST", //訪問方式
data:j, //傳入服務端的資料
dataType:"json",
contentType:"application/json;charset=utf-8",
success : function(data){
alert(data);
alert(data.name);
alert(data.password);
}
}
);
});
Servlet:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String user = request.getParameter("j");
String name = request.getParameter("name");
String password = request.getParameter("password");
System.out.println(user);
//JSON對象
JSONObject jsonObject = new JSONObject();
jsonObject.accumulate("password", password).accumulate("name", "www");
response.setContentType("application/json");
response.getWriter().write(jsonObject.toString());
}
現在的問題是,我可以從用戶端將Servlet中傳出的資料解析,如上面的name=www,但用戶端傳入的對象
(var j ={"name":"王","password":123456})在Servlet中取不到,好像是說要先去對象,我覺得應該是,
畢竟json提供了很多方法將取到到的json資料轉換為別的格式,但還是搞不懂。本人新手,第一次接觸,希望知道的朋友指定一下,感激不盡。
答:
我是這樣理解的 首先 對你要傳遞 給 伺服器(servlet)的 json序列化 用JSON.stringify,
確保我們傳遞的字串 符合 json 結構 ,由於我們傳遞的資料 是以流的形式 傳遞到伺服器,所以我們應該在
伺服器端 讀進緩衝區 在轉換字串輸出
public String readJSONString(HttpServletRequest request){
StringBuffer json = new StringBuffer();
String line = null;
try {
BufferedReader reader = request.getReader();
while((line = reader.readLine()) != null) {
json.append(line);
}
}
catch(Exception e) {
System.out.println(e.toString());
}
return json.toString();
}
} 之後 再轉成 jsonObject 對象。就可以取到值了
還有一點 要注意 編碼格式