Ajax应用 1.自动查询(验证用户名存在) 2.按需取数据(动态刷新下拉列表)

1.什么是Ajax?  Asynchronous JavaScript and XML( 异步JavaScript和XML 

      一种创建交互式网页应用的网页开发技术
基于web标准(standards-based presentation)XHTML CSS的表示
使用 DOM(Document Object Model)进行动态显示及交互;
使用 XML 和 XSLT 进行数据交换及相关操作;
使用 XMLHttpRequest 进行异步数据查询、检索;
使用 JavaScript 将所有的东西绑定在一起
2.优势
通过异步模式,提升了用户体验
优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用
 例子:Google Maps!

3.创建ajax程序的基本流程(以验证用户名存在性为例子)

①在< script >中 建XMLHttpRequest对象
②使用XMLHttpRequest对象创建请求request对象
  1. var request;
  2. if (window.XMLHttpRequest) { // Mozilla,...
  3.     request = new XMLHttpRequest();
  4.  }else if (window.ActiveXObject) { // IE
  5.        request = new ActiveXObject(“Msxml2.XMLHTTP”);
  6. }
③监视response的状态,写回调函数处理服务器返回的数据
  1. function checkme(){
  2.      //得到文本框值
  3.      var name=document.all.stname.value;
  4.      //把 name发给 servlet 或 jsp 防止缓存 加上一个 r=0.7649321
  5.      request.open("get","check?stname=" name "&r=" Math.random());
  6.      request.send(null);    
  7.      }
④使用XMLHttpRequest对象发送请求  使用事件触发

  1. request.onreadystatechange = sendName;
  2. function sendName(){    
  3.      if(request.readyState==4){ //接收完毕
  4.      //数据呢?
  5.      var fhz=request.responseText;
  6.     
  7.      if(fhz=="true"){ //用户存在了
  8.      document.all.info.innerHTML="用户名已存在";
  9.      document.all.info.style.color="red";
  10.      }else{
  11.      document.all.info.innerHTML="用户名可用";
  12.      document.all.info.style.color="green";
  13.      }    
  14.      }    
  15.      }
4.两个应用——验证用户存在否,动态加下拉列表
  
  1)注册 zhuce.jsp
  1. <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4.   <head>
  5.     <title>My JSP 'zhuce.jsp' starting page</title>
  6.      <script>
  7.      //学会 ajax 一个对象 XMLHttpRequest
  8.      // 两个方法 open(),send() 两个属性 readyState ,responseText 一个事件 onreadystatechange

  9.      var request=new XMLHttpRequest(); //注意这行只在ie7 --10 firefox 谷歌    
  10.      //给request 加一个事件
  11.      request.onreadystatechange = getSheng;
  12.     
  13.      function checkme(){
  14.      //得到文本框值
  15.      var name=document.all.stname.value;
  16.      //把 name发给 servlet 或 jsp 防止缓存 加上一个 r=0.7649321
  17.      request.open("get","check?stname=" name "&r=" Math.random());
  18.      request.send(null);    
  19.      }
  20.     
  21.      function sendName(){    
  22.      if(request.readyState==4){ //接收完毕
  23.      //数据呢?
  24.      var fhz=request.responseText;
  25.     
  26.      if(fhz=="true"){ //用户存在了
  27.      document.all.info.innerHTML="用户名已存在";
  28.      document.all.info.style.color="red";
  29.      }else{
  30.      document.all.info.innerHTML="用户名可用";
  31.      document.all.info.style.color="green";
  32.      }    
  33.      }    
  34.      }
  35.     
  36.      //初始化省列表
  37.      function initsheng(){
  38.      request.open("get","test?r=" Math.random());
  39.      request.send(null);
  40.      }
  41.     
  42.     
  43.      function getSheng(){
  44.      if(request.readyState==4){ //接收完毕
  45.      var fhz=request.responseText;
  46.      eval("var sz=" fhz);
  47.     
  48.      for(var i in sz){
  49.      //动态加下拉列表
  50.      var op=new Option(sz[i],sz[i]);
  51.      document.all.sheng.options.add(op);    
  52.      }    
  53.      }
  54.      }
  55.      </script>
  56.   </head>
  57.   
  58.   <body onload="initsheng()">
  59.               用户名<input type="text" id="stname" onblur="checkme()" />
  60.      <span id="info"></span>
  61.      <hr/>
  62.      <select id="sheng">
  63.         <option>请选择一个省</option>
  64.      </select>
  65.      
  66.   </body>
  67. </html>
2.CheckNameServlet.java
  1. package servlet;

  2. import java.io.IOException;
  3. import java.io.PrintWriter;

  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;

  8. import dao.UserDao;
  9. /**
  10.  * 检查用户名是否重复的servlet
  11.  * @author YC
  12.  *
  13.  */
  14. public class CheckNameServlet extends HttpServlet {

  15.     UserDao dao=new UserDao();
  16.     
  17.     public void destroy() {
  18.         super.destroy(); // Just puts "destroy" string in log
  19.         // Put your code here
  20.     }

  21.     public void doGet(HttpServletRequest request, HttpServletResponse response)
  22.             throws ServletException, IOException {
  23.         
  24.         String name=request.getParameter("stname");
  25.         System.out.println("得到你要检查的名字" name);
  26.         
  27.         boolean ok=dao.checkUser(name);

  28.         response.setContentType("text/html");
  29.         PrintWriter out = response.getWriter();        
  30.         out.print(ok); //向网页返回数据 一定是string型的
  31.         out.flush();
  32.         out.close();
  33.     }

  34.     public void doPost(HttpServletRequest request, HttpServletResponse response)
  35.             throws ServletException, IOException {
  36.         // fix 修改过
  37.         doGet(request, response);
  38.     }

  39.     /**
  40.      * Initialization of the servlet.

  41.      *
  42.      * @throws ServletException if an error occurs
  43.      */
  44.     public void init() throws ServletException {
  45.         // Put your code here
  46.     }

  47. }
3.TestServlet.java
  1. package servlet;

  2. import java.io.IOException;
  3. import java.io.PrintWriter;

  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;

  8. import com.google.gson.Gson;

  9. import dao.UserDao;
  10. /**
  11.  * 省ajax json动态下拉列表
  12.  * @author YC
  13.  *
  14.  */
  15. public class TestServlet extends HttpServlet {

  16.     
  17.     UserDao dao=new UserDao();
  18.     
  19.     public void destroy() {
  20.         super.destroy(); // Just puts "destroy" string in log
  21.         // Put your code here
  22.     }

  23.     public void doGet(HttpServletRequest request, HttpServletResponse response)
  24.             throws ServletException, IOException {
  25.         
  26.         response.setCharacterEncoding("gbk");
  27.         response.setContentType("text/html");
  28.         PrintWriter out = response.getWriter();
  29.         
  30.         System.out.println("----------");
  31.         String ok[]= dao.getAllSheng();
  32.         Gson gson=new Gson();
  33.         String fh= gson.toJson(ok);
  34.         out.print(fh);
  35.         
  36.         
  37.         out.flush();
  38.         out.close();
  39.     }

  40.     public void doPost(HttpServletRequest request, HttpServletResponse response)
  41.             throws ServletException, IOException {
  42.         // fix 修改过
  43.         doGet(request, response);
  44.     }

  45.     /**
  46.      * Initialization of the servlet.

  47.      *
  48.      * @throws ServletException if an error occurs
  49.      */
  50.     public void init() throws ServletException {
  51.         // Put your code here
  52.     }

  53. }
4.UserDAO.java

  1. package dao;

  2. import java.util.ArrayList;
  3. import java.util.List;

  4. public class UserDao {
  5.     
  6.     /**
  7.      * 检查用户名是否合法
  8.      * @param name
  9.      * @return
  10.      */
  11.     public boolean checkUser(String name){
  12.         
  13.         List<String> list=new ArrayList<String>();
  14.         list.add("fix");
  15.         list.add("xiaoxin");
  16.         list.add("world");
  17.         
  18.         if (list.contains(name)) {
  19.             return true; //在列表中存在
  20.         }else{
  21.             return false;
  22.         }        
  23.     }
  24.     
  25.     public String[] getAllSheng(){
  26.         String mp[] = {"安徽","北京","福建","甘肃","广东","广西","贵州","海南","河北","河南","黑龙江","湖北","湖南","吉林","江苏","江西","辽宁","内蒙古","宁夏","青海","山东","山西","陕西","上海","四川","天津","西藏","新疆","云南","浙江","重庆"};
  27.         return mp;
  28.     }
  29. }

    1)自动查询:是指网页上执行一定的客户端操作之后,在客户端不刷新的情况下,得到服务器端自动查询数据库后的内容,查询过程是异步进行。当然,能够利用AJAX技术实现。如自动补齐、验证用户名等。
2)按需取数据:也是在网页上执行一定的客户端操作之后,能够根据需要在服务器端自动获取相应内容,但是客户端不刷新,所有查询过程都是异步进行。在注册表单中,选择不同的省份后显示该省份的城市。


 

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(1276) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您可以通过以下步骤实现: 1. 在前端页面中,添加一个文本框用于输入用户名,并添加一个按钮用于触发验证用户是否存在的操作。 2. 在按钮的点击事件中,使用Ajax向后端发送请求,以验证用户名是否存在。 3. 后端接收到请求后,查询数据库中是否存在用户名,如果存在,则返回一个存在的标识;否则返回一个不存在的标识。 4. 前端通过接收到的标识来判断用户名是否存在,并进行相应的操作,如提示用户或者允许用户进行下一步操作。 下面是一个使用jQuery实现的示例代码: ```javascript // 前端代码 $('#check_username_btn').click(function() { var username = $('#username_input').val(); $.ajax({ url: '/check_username', type: 'POST', data: {username: username}, success: function(data) { if (data.exist) { alert('该用户名已被占用!'); } else { alert('该用户名可以使用!'); } }, error: function() { alert('请求失败!'); } }); }); // 后端代码 from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/check_username', methods=['POST']) def check_username(): username = request.form.get('username') # 查询数据库中是否存在用户名 exist = db.query('SELECT * FROM users WHERE username=%s', [username]) return jsonify({'exist': exist}) if __name__ == '__main__': app.run() ``` 在上述代码中,我们使用了jQuery的ajax方法向后端发送POST请求,请求的数据包括用户名。后端接收到请求后,查询数据库中是否存在用户名,如果存在,则返回一个存在的标识;否则返回一个不存在的标识。前端通过接收到的标识来判断用户名是否存在,并进行相应的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值