axaj异步查询学习(多级联动、校对信息)
来源:互联网 发布:广数系统英制螺纹编程 编辑:程序博客网 时间:2024/06/08 09:13
要使用异步查询就要用到axaj,也可以说ajax有异步查询的功能,所谓的异步查询可以理解为在不整个页面刷新的情况下(即局部刷新)向服务器或者后台发送请求并拿到服务器的响应。
1. 导入jar包
要使用ajax就要先导入一些jar包,一般有json-lib-2.1-jdk15.jar,ezmorph-1.0.3.jar, commons-logging-1.1.1.jar,commons-lang-2.5.jar,commons-collections-3.1.jar, commons-beanutils-1.7.0.jar,jquery-1.10.2.min.js,jar包的版本不一定要与本文一模一样。
2.JSP页面上的操作
请求有post请求和get请求两种,本文用post请求,
<script type="text/javascript"> var xhr=false; function isUsernameValid(){ //1.创建XMLHttpRequest对象 //非IE浏览器 if(window.XMLHttpRequest){ xhr=new XMLHttpRequest(); }else if(window.ActiveXObject){//IE浏览器 xhr=new ActiveXObject("Microsoft.XMLHTTP"); } if(xhr){ /* GET请求 */ /* //2.定义url连接 var username = document.getElementById("username").value; var url = "isValidServlet"; //3.打开服务器的连接 xhr.open("get", url, true); //4.绑定回调函数(即响应回来后,可以调用的函数),readystate 0~4 xhr.onreadystatechange = callback; //5.发送请求 var username=document.getElementById("username").value;//根据id找数据 xhr.send("username="+username); */ /* post请求 */ //2.定义url连接 var url="IsValidServlet"; //3.打开服务器的连接 xhr.open("post",url,true); //---------------------------post请求必须设置的参数-------------------------- xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //4.绑定回调函数(即响应回来后,可以调用的函数),readystate 0~4 xhr.onreadystatechange=callback; //5.发送请求 var username=document.getElementById("username").value;//根据id找数据 xhr.send("username="+username); }else{ alert("XMLHttpRequest创建失败"); } } //回调函数 function callback(){ if(xhr.readyState==4){//响应完成 if(xhr.status==200){//正常响应完成 200 OK 404路径找不到 500服务器异常 var response=xhr.responseText; document.getElementById("usernamemessage").innerHTML=response; } } } </script> <form action="RegistrationServlet" method="post"> 用户名:<input type="text" id="username" name="username" onblur="isUsernameValid()"> <font color="red" size="-1" id="usernamemessage"></font> 密码 :<input name="password" type="password" id="password" /> <input type="reset" value="重置"> <input type="submit" value="登陆"> </form>
上面的代码也可以这样写
<script type="text/javascript"> var xhr = false; function isUsernameValid() { var username=document.getElementById("username").value;//根据id找数据 $.ajax({ type: "POST", url: "IsValidServlet", data: "username="+username, //多个参数时,比如有username,password,应该这样写:data:{"username" :username,"password" :password}, success: function(Msg){ document.getElementById("usernamemessage").innerHTML=Msg.message; } }); } <form action="RegistrationServlet" method="post"> 用户名:<input type="text" id="username" name="username" onblur="isUsernameValid()"> <font color="red" size="-1" id="usernamemessage"></font> 密码 :<input name="password" type="password" id="password" /> <input type="reset" value="重置"> <input type="submit" value="登陆"> </form>
3.Servlet的操作
@WebServlet("/IsValidServlet")public class IsValidServlet extends HttpServlet { private static final long serialVersionUID = 1L; PrintWriter printWriter=null; @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取参数 String username = request.getParameter("username"); //指定HTTP响应的字符集编码 response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); //伪校验(不连接数据库) PrintWriter writer = response.getWriter(); if("tomcat".equals(username)) { String message="用户名合法"; writer.write(message); /*也可以用json,代码如下 String message="{\"message\":\"用户名合法\"}"; response.setContentType("application/json;charset=utf-8"); PrintWriter writer = response.getWriter(); writer.write(message); writer.flush(); writer.close(); */ } else { String message="用户名不合法"; writer.write(message); } writer.flush(); writer.close();}
多级联动
1.jsp页面操作
<script type="text/javascript"> var xhr = false; function getSclassify() { var bclassifyObj = document.getElementById("bclassify");//拿到大分类的对象 var bclassifyId = bclassifyObj.options[bclassifyObj.selectedIndex].value;//再拿大分类的value $.ajax({ type: "POST", url: "getSclassifyServlet", data: "bclassify="+bclassify, success: function(sclassifies){ //将sclassifyObj中的sid、sname绑定到city下拉列表 var sclassifyObj = document.getElementById("sclassify"); //清空下拉列表 sclassifyObj.options.length = 1; for(var i=0;i<sclassifies.length;i++) { var sclassify = sclassifies[i]; var sid = sclassify.id; var sname = sclassify.sname; //在下拉列表末尾添加新option sclassifyObj.options[sclassifyObj.options.length] = new Option(sname,sid); } } }); } <form action=""> 用户名:<input type="text" name="username"><br/><br/> 大分类:<select id="bclassify" name="bclassify" onchange="getSclassify()"> <option value="">--请选择--</option> <option value="1000">个人护理</option> <option value="2000">家居用品</option> <option value="3000">食品饮料</option> </select> 小分类:<select id="sclassify" name="sclassify" > <option >--请选择--</option> </select> </form>
2.servlet的操作
@WebServlet("/getSclassifyServlet")public class GetSclassifyServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * 响应JSON格式文档 */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取参数 String bclassifyId = request.getParameter("bclassifyId"); //根据大分类ID查询小分类中所有符合条件的数据(应该连接数据库找,这里就写死了不去连接数据库了) List<Sclassify> sclassifyList = new ArrayList<Sclassify>();//Sclassify实体类里有id和name if("1000".equals(bclassifyId)) { sclassifyList.add(new Sclassify(1001,"洗发水")); sclassifyList.add(new Sclassify(1002,"沐浴露")); sclassifyList.add(new Sclassify(1003,"牙膏")); } else if("2000".equals(bclassifyId)) { sclassifyList.add(new Sclassify(2001,"厨房用品")); sclassifyList.add(new Sclassify(2002,"床上用品")); sclassifyList.add(new Sclassify(2003,"清洁用品")); } else if("3000".equals(bclassifyId)) { sclassifyList.add(new Sclassify(3001,"水果")); sclassifyList.add(new Sclassify(3002,"酒类")); sclassifyList.add(new Sclassify(3003,"零食")); } JSONArray jsonArray = JSONArray.fromObject(sclassifyList); System.out.println("json格式响应内容:" + jsonArray.toString()); //指定http响应字符集编码 response.setCharacterEncoding("utf-8"); response.setContentType("application/json;charset=utf-8"); //响应 PrintWriter writer = response.getWriter(); writer.write(jsonArray.toString()); writer.flush(); writer.close(); }
一般情况下,大家都喜欢用json。
4.附
如果一个jsp页面要做多个异步查询的话,需要改动几点
1.jsp页面
比如有两个需要异步查询的地方
$.ajax({ type: "POST", //url: "getSclassifyServlet", url: "getSclassifyServlet/getsclassify " //url地址带上后缀getsclassify data: "bclassify="+bclassify, success: function(sclassifies){ } }); $.ajax({ type: "POST", //url: "getSclassifyServlet", url: "getSclassifyServlet/getname " //url地址带上后缀getname data: "bclassify="+bclassify, success: function(sclassifies){ } });
2.servlet页面
1.使用service方法(此方法会接收所有POST和GET请求),不用dopost和doget方法
@WebServlet("/getSclassifyServlet/*")//代表接收所有发到getSclassifyServlet的post和get请求public class GetSclassifyServlet extends HttpServlet { private static final long serialVersionUID = 1L; PrintWriter printWriter=null; @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String url=request.getRequestURI();//获取URL的值 if(url.endsWith("getsclassify")){//如果URL以getsclassify结尾就调用getSclassify()方法 getSclassify(request, response); }else if(url.endsWith("getname")){ getName(request, response); }protected void getSclassify(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取参数 String bclassifyId = request.getParameter("bclassifyId"); //根据大分类ID查询小分类中所有符合条件的数据(应该连接数据库找,这里就写死了不去连接数据库了) List<Sclassify> sclassifyList = new ArrayList<Sclassify>();//Sclassify实体类里有id和name if("1000".equals(bclassifyId)) { sclassifyList.add(new Sclassify(1001,"洗发水")); sclassifyList.add(new Sclassify(1002,"沐浴露")); sclassifyList.add(new Sclassify(1003,"牙膏")); } else if("2000".equals(bclassifyId)) { sclassifyList.add(new Sclassify(2001,"厨房用品")); sclassifyList.add(new Sclassify(2002,"床上用品")); sclassifyList.add(new Sclassify(2003,"清洁用品")); } else if("3000".equals(bclassifyId)) { sclassifyList.add(new Sclassify(3001,"水果")); sclassifyList.add(new Sclassify(3002,"酒类")); sclassifyList.add(new Sclassify(3003,"零食")); } JSONArray jsonArray = JSONArray.fromObject(sclassifyList); System.out.println("json格式响应内容:" + jsonArray.toString()); //指定http响应字符集编码 response.setCharacterEncoding("utf-8"); response.setContentType("application/json;charset=utf-8"); //响应 PrintWriter writer = response.getWriter(); writer.write(jsonArray.toString()); writer.flush(); writer.close(); } protected void getName(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* 这里像getSclassify()一样,写需要做的验证 */ }}
希望本文可以带给你一些帮助。
阅读全文
1 0
- axaj异步查询学习(多级联动、校对信息)
- 右下角信息提示脚本&多级联动Select
- axaj
- 多级联动
- 多级联动
- 多级联动
- 三级联动 多级联动
- 基于Spring,Struts2的axaj实现异步请求
- 字符集和校对规则(学习笔记)
- 多级联动数据库菜单
- 多级联动分类
- ASP 多级联动
- JavaScript 多级联动select
- 多级联动菜单
- 多级菜单联动
- javascript多级联动select
- JavaScript 多级联动select
- JavaScript 多级联动select
- DFS水题(HDU2616)
- 【codevs 1081】线段树练习2(单点查询+区间修改)
- 03-kafka配置server.properties
- EasyUi 下拉选择框onchage( )事件
- C++ function templates(1)---《C++ Templates》
- axaj异步查询学习(多级联动、校对信息)
- ubuntu mysql5.7 改变数据目录
- Ajax实现动态刷新(Post)
- Failed to execute goal maven-javadoc-plugin-----在JDK8下maven-javadoc-plugin插件报错的问题
- C++ bool,char,short,int,long,float,double数据类型大小以及数据溢出值求解
- (HihoCoder
- python分类查询
- 构建高性能数据库缓存之redis主从复制
- 学习记录