servlet获取不到Jquery ajax post过来的数据

工大小生 发布于 2014/04/17 09:05
阅读 8K+
收藏 0
前台jspjsp页面有如下代码:
var par={a:"dasdadasdadasd",b:"哈哈"};
var options = {
                     url: "servlet/Usrservlet",
                     type: "POST",                    
                     dataType: "json",     
                     contentType: "application/json; charset=utf-8",                
                     data:par ,
                     async:false,
                    success: function (data) {
                         alert(data.detail);
                     }
                 };
 
                $.ajax(options);
后台servlet:
String name=request.getParameter("a");
String address=request.getParameter("b");
取到的值为空,但是将type设置为GET方式时,可以获取到值,这是为什么?不换成get方式,怎样才能获取到值?

以下是问题补充:

@工大小生:问题以解决,去掉contentType就ok,原因不明,有朋友说抓http包,只因我是新手,没看出什么端倪,谢谢大家! (2014/04/17 11:17)
加载中
0
魔力猫
魔力猫

贴一下你servlet全部的代码,你在哪个方法里面取值的呢,servlet分post和get两个方法的

面向阳光
面向阳光
回复 @工大小生 : 不注释的话返回的是json对象,不是单个变量形式,解析json对象就能拿到值了
小小志
小小志
回复 @工大小生 : application/json意思是发json格式的数据
工大小生
工大小生
//contentType: "application/json; charset=utf-8", 注释该句代码之后可以获取到了,不知道为什么啊
0
工大小生
工大小生

引用来自“魔力猫”的评论

贴一下你servlet全部的代码,你在哪个方法里面取值的呢,servlet分post和get两个方法的

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
        String name=request.getParameter("a");
        String address=request.getParameter("b");
        response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
String returnMsg = "{\"flag\":\"success\",\"detail\":\"恭喜您!登录成功\"}";
System.out.println(name);
System.out.println(address);
out.write(returnMsg);
out.flush();
out.close();

}


/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.

* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name=request.getParameter("a");
        String address=request.getParameter("b");
        response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
String returnMsg = "{\"flag\":\"success\",\"detail\":\"恭喜您!登录成功\"}";
System.out.println(name);
System.out.println(address);
out.write(returnMsg);
out.flush();
out.close();
        
}
public void processRequest(HttpServletRequest request,
HttpServletResponse response) throws IOException {
String name=request.getParameter("a");
        String address=request.getParameter("b");
        response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
String returnMsg = "{\"flag\":\"success\",\"detail\":\"恭喜您!登录成功\"}";
System.out.println(name);
System.out.println(address);
out.write(returnMsg);
out.flush();
out.close();
}

0
番茄酱汁
番茄酱汁

你把 contentType删了试试 还有看看后台的json格式正确啊?

面向阳光
面向阳光
回复 @Breaking : 用fiddle抓包
duty
duty
回复 @工大小生 : 抓一下http包应该就清楚了。
工大小生
工大小生
确实是把contentType去掉就没事了,原因是什么呢?我是获取前台的数据,跟后台的json数据没关系吧~
0
魔力猫
魔力猫

看来是从浏览器到 服务器操作系统、WEB容器,这些编码不一致造成的。

0
陶邦仁
陶邦仁

request.setCharacterEncoding( "UTF-8" ); 设置下编码

0
乾坤摄
乾坤摄

url: "servlet/Usrservlet", url 不对,要加入 ,项目 如 你的 项目是  127.0.0.1:8080/test

那么 url:url: "/test/servlet/Usrservlet", 

工大小生
工大小生
已经执行了doPost函数,说明不是url的问题
0
Ryan-瑞恩
Ryan-瑞恩

你的post提交方法和get的提交方法,后台有没有对应上???

0
Ryan-瑞恩
Ryan-瑞恩

你的post提交方法和get的提交方法,后台有没有对应上???

0
千斤难买春秋醉
千斤难买春秋醉

async:false 这是同步了。。。不需要写,默认为true异步

返回顶部
顶部