public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { //response.setContentType("text/html;charset=utf-8");
response.setContentType("application/json;charset=UTF-8");
PrintWriter out = response.getWriter();

TongjiDAO tj=new TongjiDAO();
String tjtype=request.getParameter("tjtype");

if(tjtype.equals("tj1")){
int[] counts=new int[12];
CreateDate t=new CreateDate();
ArrayList startlist=t.getTime("-1");
ArrayList endlist=t.getTime("-31");
System.out.println("startlist.size()="+startlist.size());
for(int i=0;i<startlist.size();i++){
counts[i] = tj.getrcdNumByMon((Date)startlist.get(i), (Date)endlist.get(i));
}
// for(int i=0;i<counts.length;i++){
// request.setAttribute("num"+i, counts[i]);
// }
//制作标签数组
java.util.Date date = new java.util.Date();
DateFormat df = DateFormat.getDateInstance();
String[] labels = new String[12];
String dates = df.format(date);
String dateArr[] = dates.split("-");
int year = Integer.parseInt(dateArr[0]);
int mon = Integer.parseInt(dateArr[1]);
int total = 12;
for (int i = 0; i < labels.length; i++) {
if (mon != 0) {
labels[i] = year + "年" + mon + "月份";
mon--;
} else {
labels[i] = (year - 1) + "年" + total + "月份";
total--;
}
} JSONObject jsonObj=new JSONObject();
//将准备好的两个数组加进来
jsonObj.accumulate("counts", counts);
jsonObj.accumulate("labels", labels);
out.println(jsonObj.toString());
System.out.println(jsonObj.toString());
request.getRequestDispatcher("/WEB-INF/tongji/tj1.jsp").forward(request, response);
} }全一点的代码

解决方案 »

  1.   

    JSON.parse(str);这个函数解析标准格式的json字符串。
    out.println(jsonObj.toString());你的后台只println,并没有flush和close,应该没有写回,所以你页面获取的应该是一个null。
      

  2.   

    楼上说的对啊,你要这样写:response.getWriter().write(json_str);  AJAX的相应才能接收到。
    还有你在servlet里面打印一下你的JSON字符串,放到JSON解析工具中看一下格式是否标准。
      

  3.   

    加了那两句还是不行啊,alert(typeof(jasonObj))返回Object
      

  4.   

    这个错误就是告诉你,返回的json字符串不规则,看看这个字符串是什么内容。
      

  5.   

    换一个JSON解析方法,就用eval函数吧,这样写:var json_obj = eval ("(" + json_str + ")");
      

  6.   


    控制台打出来的
    {"counts":[167,591,307,43,8,0,0,1,0,0,0,0],"labels":["2014年7月份","2014年6月份","2014年5月份","2014年4月份","2014年3月份","2014年2月份","2014年1月份","2013年12月份","2013年11月份","2013年10月份","2013年9月份","2013年8月份"]}
      

  7.   

    servlet是不是要这样写
    response.setContentType("(application/x-json;charset=UTF-8");
      

  8.   

    最新的Servlet。感谢大家帮我看看,这个掉问题搞了两天了,实在不行我就重新
    学习、梳理一下ajax、json、servlet中使用json、ajax的知识了
      

  9.   


    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException { response.setContentType("(application/x-json;charset=UTF-8");
    PrintWriter out = response.getWriter();

    TongjiDAO tj=new TongjiDAO();
    String tjtype=request.getParameter("tjtype");

    if(tjtype.equals("tj1")){
    int[] counts=new int[12];
    CreateDate t=new CreateDate();
    ArrayList startlist=t.getTime("-1");
    ArrayList endlist=t.getTime("-31");
    System.out.println("startlist.size()="+startlist.size());
    for(int i=0;i<startlist.size();i++){
    counts[i] = tj.getrcdNumByMon((Date)startlist.get(i), (Date)endlist.get(i));
    }
    // for(int i=0;i<counts.length;i++){
    // request.setAttribute("num"+i, counts[i]);
    // }
    //制作标签数组
    java.util.Date date = new java.util.Date();
    DateFormat df = DateFormat.getDateInstance();
    String[] labels = new String[12];
    String dates = df.format(date);
    String dateArr[] = dates.split("-");
    int year = Integer.parseInt(dateArr[0]);
    int mon = Integer.parseInt(dateArr[1]);
    int total = 12;
    for (int i = 0; i < labels.length; i++) {
    if (mon != 0) {
    labels[i] = year + "年" + mon + "月份";
    mon--;
    } else {
    labels[i] = (year - 1) + "年" + total + "月份";
    total--;
    }
    } JSONObject jsonObj=new JSONObject();
    //将准备好的两个数组加进来
    jsonObj.accumulate("counts", counts);
    jsonObj.accumulate("labels", labels);
    out.write(jsonObj.toString());
    out.flush(); 
        out.close(); 
    }
    }
      

  10.   

    楼上几位说的我觉着都没问题,其实Ajax 有个比较蛋疼的问题就是 类型要对应, 我这有段代码你参考一下   Ajax和servlet 交互 返回 json 问题。
    jsp界面
    jQuery.ajax({
    url:"<%=request.getContextPath()%>/servlet/FtpUtilServlet",
    type:"post",
    data:"type="+myprovince_id,
    dataType:"json",
    success:function(json){
    var cc = json.array;
    }});
    servlet 界面
    [code=html] JSONArray array = new JSONArray();
                    JSONObject filejson = new JSONObject();
                                     filejson.put("array", array);
                            out.print(filejson);
    out.flush();
    out.close();