var jsonObject = new Object(); jsonObject.name = "jack"; jsonObject.phone = "13879013334"; jsonObject.id = "asdghj"; $.ajax({ type:"POST", url: "${pageContext.request.contextPath}/ajax", //contentType: "application/json", //用servlet获取 不需要写这个 因为写了post类型,默认application/x-www-form-urlencoded dataType: "json", //服务器返回的数据类型。可以写json,也可以写text 有时候后台发过来的json格式字符串会有问题,如BOM头,用json会拿不到数据,需要用text来测试 data: jsonObject, //发送到服务器的参数,直接用json对象。因为contentType没有用"application/json"就不需要用JSON.stringify(jsonObject)转字符串, success: function (data) { console.log(data) }, error: function (data){ alert("解析数据失败!"); } });
解读: 客户端提交的contentType只能为application/x-www-form-urlencoded或者multipart/form-data,二进制数据使用多重编码。前面默认编码,即字符串,后者为文件。但如果从服务器下载的话编码就很多了,比如你说的application/json,text/plan,application/image.....等都可以。
用springmvc的注解@RequestBody Map<String, String> params 可以接收到用ajax发来的参数.
前台代码 $.ajax({ type : "POST", url : url, data : data, dataType : "JSON", contentType:"application/json", success : function(result) { alert(result); } });
后台代码 @RequestMapping(value = "/sk/api/params", method = RequestMethod.POST) public void params(@RequestBody Map<String, String> params, HttpServletRequest request, HttpServletResponse response) {
System.out.println("总共获取到:"+params.size()+"个参数"); for(String key : params.keySet()){ System.out.println(key + " : " + params.get(key)); } writeJson(response, "ok"); }
不用框架,前端request的contentType是application/json的话,这样获取
StringBuffer json = new StringBuffer(); BufferedReader reader = request.getReader(); while ((line = reader.readLine()) != null) { json.append(line); //若前端发送的是json格式字符串,即用JSON.stringify(obj)转换, 拿到的是{"name":"jack","phone":"13879013334","id":"asdghj"} //若前端发送的是json对象,拿到的是name=jack&phone=13879013334&id=asdghj return json.toString();
|