您的位置:首页 > Web前端 > JQuery

jquery通过ajax-json访问java后台传递参数,通过request.getParameter获取不到参数的说明

2014-06-30 16:37 981 查看
java后台服务器是apache-tomcat-6.0.37

正常的post请求(不包括ajax请求)在http头中的content-type为application/x-www-form-urlencoded,这时在java后台可以通过request.getParameter(name)的形式获取.但是通过原生ajax请求时,在java后台通过request.getParameter(name)的形式却无法获取到传入的参数.

原因是原生ajax请求时,在http头中的content-type为text/plain;charset=UTF-8.当请求到达tomcat服务器时,服务器只对application/x-www-form-urlencoded形式的http,post请求进行读取body体中的参数,并放到request的parameter中,对于原生ajax请求则直接忽略,不会读取body体中的参数,才导致request.getParameter(name)读取不到参数.

这样有两种方式解决

第一种,通过json传递数据,在java后台,用下面java代码读取RequestPayload的参数,就可以获取到传入的参数

// 前台

jQuery.ajax({
url: url,                // 访问地址
type: "POST",    // post提交
data: JSON.stringify(parm),  // 对象参数转换json格式字符串
contentType:
"application/json;charset=UTF-8",   // http content type
dataType: "json",                        // 指定json格式
success: function (data) {
    // do success
},
error: function (error) {
   //do error
}
});

// 后台-获取到的是多个参数的json格式字符串,通过gson转换成map对象,即可以通过键值对方式去的想要的参数

public String getRequestPayload(HttpServletRequest req) {
        StringBuilder sb = new StringBuilder();
        try {
        BufferedReader reader = req.getReader();
char[]buff =
new char[1024];
int len;
while((len = reader.read(buff)) != -1) {
     
  sb.append(buff,0, len);
}
        } catch (IOException e) {

        e.printStackTrace();
        }
        return sb.toString();
}
第二种, 在前台传递参数的时候用对象,并指定content-type为application/x-www-form-urlencoded

// 前台

var parm = {
param1 : "1",
param2 : "2"
};

jQuery.ajax({
url: url,                // 访问地址
type: "POST",    // post提交
data: parm,  // 对象转json字符串参数
contentType: "application/x-www-form-urlencoded",   // http content type
success: function (data) {
       // do success
},
error: function (error) {
      //do error
}
});
后台通过request.getParameter(name)方式就可以获取到参数.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐