前台页面传递JSON字符串给后台服务

DEMO:

var data=JSON.stringify({"page": {"pagenow": 1,"pagesize": 20},"file":{"name":"jpg"},"catalogs":[{"id":1},{"id":2}]});
        $.ajax({
            type:"POST",
            url:"//访问的url",
            data:data,
            contentType:"application/json", 
            success:function(data){
                //显示数据
            }
        });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

注意:

一、contentType

contentType,可以是application/x-www-form-urlencoded这种默认类型的,不过当后台有struts等框架的话,会在action之前拦截请求,并把request body 里面的值都读出来,导致我们不能再request里面读取到值,只能依赖struts的domain model 
所有如果有后台用这种机制的话,那就需要更改contentType:application/json,这样子strust就不会拦截请求了

二、stringify和parseJSON

这两种方法不能乱用,一不小心的话就会导致后台解析不了数据,正确的用法在上面。 
stringify是将Json转义,parseJSON是将json去除转义并解析成对象 
总结

前端传后台json,应该传字符串过去,不能传Object对象,而且要适当指定contentType

三、后台JAVA如何处理

public ActionForward queryJson(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
try {
InputStream in = request.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String str=reader.readLine();
System.out.println(str);
PrintWriter out = null;
String jsontext = "";
out = encodehead(request, response);
} catch (Exception e) {
e.printStackTrace();
}
return null;

}

控制台输出:{"page":{"pagenow":1,"pagesize":20},"file":{"name":"jpg"},"catalogs":[{"id":1},{"id":2}]}

你可能感兴趣的:(前台页面传递JSON字符串给后台服务)