AJAX异步请求获取json对象时,回调函数获取不到数据。
程序开发
2023-09-24 19:20:46
在学习AJAX获取servlet中JSON对象时遇到获取不到数据的问题。
问题情境:在jsp页面请求servlet 获取json串数据,将数据显示在jsp页面上的表格中。
如:
问题:无法将数据显示在表格中
解决如下:
代码:
AJAX请求代码:
servlet页面代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);response.getWriter().append("Served at: ").append(request.getContextPath());System.out.println("进入doget方法");//设置编码格式response.setCharacterEncoding("UTF-8");//获取传入的数据String getperson=request.getParameter("person");System.out.println("得到的"+getperson);//模拟数据输入userInfo user=new userInfo();user.setName("小王");user.setSex("男");user.setAge(20);//创建输出流PrintWriter out=response.getWriter();//创建josn对象JSONObject operson=new JSONObject();if(getperson.equals("小王")) {//将josn对象写入输出流System.out.println("写入的数据为:"+user);out.print(operson.fromObject(user));}out.flush();out.close();}
jsp页面表格代码
姓名 性别 年龄
问题原因:
servlet的doGet方法中一行语句影响了AJAX回调函数中的json串。
response.getWriter().append("Served at: ").append(request.getContextPath());
在chrome中调试可查看到
有此语句的数据:
无此语句的数据:
将此代码注释掉即可
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);/** response.getWriter().append("Served at: ").append(request.getContextPath());*/System.out.println("进入doget方法");//设置编码格式response.setCharacterEncoding("UTF-8");//获取传入的数据String getperson=request.getParameter("person");System.out.println("得到的"+getperson);//模拟数据输入userInfo user=new userInfo();user.setName("小王");user.setSex("男");user.setAge(20);//创建输出流PrintWriter out=response.getWriter();//创建josn对象JSONObject operson=new JSONObject();if(getperson.equals("小王")) {//将josn对象写入输出流System.out.println("写入的数据为:"+user);out.print(operson.fromObject(user));}out.flush();out.close();}
此代码为Eclipse中生成servlet文件时,开发工具生成的语句。
response.getWriter().append("Served at: ").append(request.getContextPath());
在页面输出为:文件所在的工程名(就是此串影响了josn对象)
response.getWriter()返回的是PrintWriter,是一个打印输出流,在AJAX进行异步请求时servlet页面向AJAX的回调函数传输数据。
如上源代码中将json对象写入输出流,回传给jsp页面。
response.getWriter().append()是在PrintWriter输出的数据前追加内容,本文中遇到的问题就是此原因,在输出给AJAX的数据前加了上图中的数据,导致虚拟机解析时找不到相应的json串,所以不会报错,也得不到数据。
上述为个人分析,如内容有误,欢迎指正。
标签:
相关文章
-
无相关信息