老师,求助

来源:2-4 实现动态图表

孬帮手慕小菜

2020-04-11 20:34:59

为什么我的Ajax里面的函数没有作用?

server:

package com.andreas.server;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSON;

/**
 * Servlet implementation class server
 */
@WebServlet("/server")
public class server extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public server() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//获取全局ServletContext对象
		ServletContext context = request.getServletContext();
		//提取ServletContext中的TimeList,ValueList;
		List<String>TimeList= (List)context.getAttribute("TimeList");
		List<String>ValueList = (List)context.getAttribute("ValueList");
		response.setContentType("text/html;charset=UTF-8");
		response.getWriter().println("服务运行正常");
		Map result = new HashMap();
		result.put("TimeList", TimeList);
		result.put("ValueList", ValueList);
		String  json  = JSON.toJSONString(result);
		response.getWriter().println(json);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

Listener:

package com.andreas.server;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;

public class RequestTotalListener implements ServletContextListener, ServletRequestListener {

	@Override
	public void requestDestroyed(ServletRequestEvent sre) {
		// TODO Auto-generated method stub
		ServletRequestListener.super.requestDestroyed(sre);
	}

	@Override
	public void requestInitialized(ServletRequestEvent sre) {
		// TODO Auto-generated method stub
		//取出全局ServletContext内的数据
		List<String>TimeList = (List)sre.getServletContext().getAttribute("TimeList");
		List<Integer>ValueList =(List) sre.getServletContext().getAttribute("ValueList");
		//获取当前时间
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("HH-mm"); //格式化
		String time = sdf.format(date); //获取当前时间
		if(TimeList.indexOf(time) == -1) { //indexOf 方法如果Time List内有time将返回所在位置,如果没有将返回-1
			//如果没有发现TimeList内有当前时间,将增加当前时间至TimeList中,并且为ValueList添加个新值(1次访问)
			TimeList.add(time);
			ValueList.add(1);
			//再将更改后的数据重新赋给getServletContext。
			sre.getServletContext().setAttribute("TimeList", TimeList);
			sre.getServletContext().setAttribute("ValueList", ValueList);
		}else {
			//如果找到了当前时间,将访问量ValueList+1
			int  index = TimeList.indexOf(time); //寻找当前时间time的位置,为了修改VilueList相对应位置的数据
			int value = ValueList.get(index);//获取到ValueList对应位置的数据
			ValueList.set(index, value+1);//修改相应位置的value数据(+1次访问量);
			//再将更改后的数据重新赋给getServletContext。
			sre.getServletContext().setAttribute("ValueList", ValueList);
		}
	}

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		// TODO Auto-generated method stub
		ServletContextListener.super.contextDestroyed(sce);
	}

	@Override
	public void contextInitialized(ServletContextEvent sce) {
		// TODO Auto-generated method stub

		List<String>TimeList = new ArrayList<>();
		List<Integer> ValueList = new ArrayList<>();
		sce.getServletContext().setAttribute("TimeList", TimeList); //将TimeList存放在ServletContext里
		sce.getServletContext().setAttribute("ValueList", ValueList);//将ValueList存放在ServletContext里
	}
	
}

html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/echarts.min.js"></script>
<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
</head>
<body>
	<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
	<div id="main" style="width: 600px; height: 400px;"></div>
	<script type="text/javascript">
	$.ajax({
		url :"/servlettotal/server",
		type : "get",
		dataType : "json",
		success : function(json){
			alert("123");
			console.log(json.TimeList);
			console.log(json.ValueList);
		}
	})
		// 基于准备好的dom,初始化echarts实例
		var myChart = echarts.init(document.getElementById('main'));

		// 指定图表的配置项和数据
		var option = {
			title : {
				text : '访问量统计'
			},
			tooltip : {},
			legend : {
				data : [ '访问量' ]
			},
			xAxis : {
				data : [ "衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子" ]
			},
			yAxis : {},
			series : [ {
				name : '访问量',
				type : 'line',
				data : [ 5, 20, 36, 10, 10, 20 ]
			} ]
		};

		// 使用刚指定的配置项和数据显示图表。
		myChart.setOption(option);
	</script>
</body>
</html>

http://img.mukewang.com/climg/5e91b94e09ba9dee08430793.jpg

写回答

1回答

好帮手慕阿慧

2020-04-12

同学你好,Server中应该返回json字符串,否则会因为类型不符合,执行ajax中error函数,不执行success函数。修改如下图:
http://img.mukewang.com/climg/5e92aae209b84bd804980140.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

0

0 学习 · 9666 问题

查看课程