100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > AJAX异步请求获取json对象时 回调函数获取不到数据。

AJAX异步请求获取json对象时 回调函数获取不到数据。

时间:2024-01-04 20:36:51

相关推荐

AJAX异步请求获取json对象时 回调函数获取不到数据。

在学习AJAX获取servlet中JSON对象时遇到获取不到数据的问题。

问题情境:在jsp页面请求servlet 获取json串数据,将数据显示在jsp页面上的表格中。

如:

问题:无法将数据显示在表格中
解决如下:

代码:

AJAX请求代码:

<script type="text/javascript">$(document).ready(function(){$("#but2").click(function(){var person={"person":"小王"};$.getJSON("josn",person,function(a){$("#td1").html(a.name);$("#td2").html(a.sex);$("#td3").html(a.age);});})});</script>

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页面表格代码

<body><input type="button" id="but2" value="添加数组数据"><table id="table1" border="5px"><tr><td>姓名</td><td>性别</td><td>年龄</td></tr><tr><td id="td1"></td><td id="td2"></td><td id="td3"></td></tr></table></body>

问题原因:

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。