2 y bei Y_Bei 于 2016.03.09 16:43 提问

利用ajax获得后台传过来的json,前端无法解析,对前端不是很深入,求指导

这是servlet:
package com.kj.servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import net.sf.json.JSONArray;

import com.kj.entity.User;
import com.kj.service.IUserService;
import com.kj.service.impl.UserServiceImpl;

public class MainPageServlet extends HttpServlet{

private static final long serialVersionUID = 1L;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

    HttpSession session = req.getSession();
    IUserService service = new UserServiceImpl();
    String user_id = req.getParameter("user");
    //可通过传参实现当前页面第一层节点的转换
    if(user_id == null){
        //若无参数,使用当前登陆用户
        user_id = session.getAttribute("user").toString();
    }
    //当前主页第一节点的user
    User current_user = service.getUserMessageByid(user_id); 

    List<User> sonUsers = service.getSonUser(current_user.getLeft_num(), current_user.getRight_num(), current_user.getUser_level());
    List<User> thrid_user =new ArrayList<User>();;
    int i = 0;
    for(User user:sonUsers){

        if(user.getUser_level() == current_user.getUser_level()+1){
            //展示第二层级
            switch(i){
                case 0 : 
                    req.setAttribute("user_1", user);
                    break;
                case 1 :
                    req.setAttribute("user_2", user);
                    break;
                default :
                    req.setAttribute("user_3", user);
                    break;  
            }
            i++;
        }else{

            thrid_user.add(user);
        }
    }


    //想将下面的array到前端,list转换为json没问题
    JSONArray array = JSONArray.fromObject(thrid_user);

    resp.getWriter().write(array.toString());
    req.setAttribute("current_user", current_user);
    req.getRequestDispatcher("main.jsp").forward(req, resp);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    doGet(req, resp);
}

}

这是js:
$(function(){

$.ajax({
    url:"main.do",
    type:"GET",
    success:function(msg){
        var user = eval("("+msg+")");
        alert(user.toString());
    },
    error:function(er){
        console.log(er);
    }
});

})

这样写页面报错:Uncaught SyntaxError: Unexpected token < 。。。

3个回答

kiansoung
kiansoung   2016.03.09 17:15
已采纳

你用ajax异步请求,响应的时候却是跳转页面!不需要跳转页面!

Y_Bei
Y_Bei 我还想问问 因为我是 登陆 然后 跳转(main.do)到主页面(main.jsp),我想在 servlet中将值传到jsp页面中,该怎么写ajax。
接近 2 年之前 回复
Y_Bei
Y_Bei .。。。。原来梗在这里 梳理了半天 把跳转注释掉就拿到了 对ajax执行还不深入
接近 2 年之前 回复
Royal_lr
Royal_lr   Ds   Rxr 2016.03.09 17:00

你先alert(msg),,弹出来看下是什么格式的数据

Y_Bei
Y_Bei $.ajax({ url:"main.do", type:"GET", success:function(msg){ alert(msg); }, error:function(er){ console.log(er); } }); 这样写的话弹出来的是对应jsp页面的源码。。。我郁闷
接近 2 年之前 回复
xcdnh001
xcdnh001   2016.03.09 17:52

ajax 写到write就行,不要用request或者response跳转,前面$.ajax({dataType : 'json',})给添加这个数据类型,就会自动将你传过来的 json值解析成
json数据,然后你就可以msg.key遍历了,key是你在后台写的

Y_Bei
Y_Bei 好的 谢谢
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!