实验室网站所遇技术(二) AJAX实现工具提示
是用AJAX的一大优点就是实现动态工具提示,在需要提示的地方采用AJAX异步通信,从服务器端提取内容,减少页面初始化代码,提高页面渲染速度。
jsp代码:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <script type="text/javascript"> //定义变量存放XMLHttpRequest对象 var xmlHttp; //记录时间发生时的鼠标位置 var x,y; //创建一个XMLHttpRequest对象 function createXMLHttpRequest() { if(window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } else if(window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } } //通过AJAX与数据库交互,取得信息 function over(e,id) { //event兼容firefox问题,这里是因为firefox不能直接使用event时间 e = e||event; //记录时间发生时鼠标位置 x = e.clientX; y = e.clientY; //创建XMLHttpRequest对象 createXMLHttpRequest(); //将状态触发器绑定到一个函数 xmlHttp.onreadystatechange = processor; xmlHttp.open("post", "agencyQuery.do?method=queryById&id=" + id); xmlHttp.send(null); } //处理从服务器返回的信息 function processor() { //存放服务器返回的响应 var result; if(xmlHttp.readyState == 4) { if(xmlHttp.status == 200) { //取出服务器返回的XML文档的所有agency标签的子节点 result = xmlHttp.responseXML.getElementsByTagName("agency"); document.getElementById("tip").style.display = "block"; //显示工具提示的起始坐标 document.getElementById("tip").style.top = y; document.getElementById("tip").style.left = x + 10; document.getElementById("tipTable").rows[0].cells[0].innerHTML =
result[0].getElementsByTagName("title")[0].firstChild.nodeValue; document.getElementById("tipTable").rows[1].cells[0].innerHTML =
result[0].getElementsByTagName("content")[0].firstChild.nodeValue; } } } //鼠标离开后的操作 function out() { document.getElementById("tip").style.display = "none"; } </script> <a href="#" onmouseover="over(event,1); return false;" onmouseout="out(); return false;">学术委员会</a> //隐藏图层,用于显示从服务器端返回的数据 <div id="tip" style="position: absolute;display: none;border: 1px;border-style: solid1 "> <table id="tipTable"> <tr> <td></td> </tr> <tr> <td></td> </tr> </table> </div> </body> </html>
action代码:
public ActionForward queryById(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws SQLException, Exception { ActionForward forward = new ActionForward(); AgencyServer agencyServer = new AgencyServer(); Map<String, String> m = new HashMap<String, String>(); int id = Integer.parseInt(request.getParameter("id")); m = agencyServer.queryById(id); if(m != null) { response.setContentType("text/xml"); response.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter();
//封装数据 //数据以xml方式返回 out.println("<agency>"); out.println("<title>" + m.get("title") + "</title>"); out.println("<content>" + m.get("content") + "</content>"); out.println("</agency>"); out.flush(); out.close(); forward = mapping.findForward("success"); } else { forward = mapping.findForward("failure"); } return forward; }
效果图:
鼠标放到学术委员会上,就显示显示相关介绍。
真是做网页发现好多地方都要用到AJAX,js特别差劲,要多练习。