素材巴巴 > 程序开发 >

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串,所以不会报错,也得不到数据。


上述为个人分析,如内容有误,欢迎指正。


标签:

素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。