zoukankan      html  css  js  c++  java
  • 19、Ajax

    一、Ajax

    Ajax:(Asynchronous JavaScript And XML)指异步 JavaScript 及 XML
    与服务器异步交互,浏览器页面局部刷新

    通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面

    基于标准的表示技术,使用XHTML和CSS;
    动态显示和交互技术,使用Document Object Model;
    数据交换和操作技术,使用XML和XSLT;
    异步数据获取技术,使用XMLHttpRequest;
    JavaScript将以上都结合在一起,Ajax = DHTML+XHR
     

     应用:

    1、数据校验    登录
    2、按需取数据    树形结构级联显示,目录树
    3、页面部分刷新  回帖
    4、搜索框提示下拉列表
     
    优点:
    1、更新数据无需刷新
    2、异步通信
    3、减轻服务器负担
     
    缺点:
    1、对搜索引擎支持较弱
    2、安全性问题
    3、移动端不友好
    4、浏览器兼容性问题 js
     
    1、Ajax 只刷新局部页面的技术
    (1)JavaScript:更新局部的网页
    (2)XML:一般用于请求数据和响应数据的封装
    (3)XMLHttpRequest对象:发送请求到服务器并获得返回结果
    (4)CSS:美化页面样式
    (5)异步:发送请求后不等返回结果,由回调函数处理结果
     
    2、XMLHttpRequest
    JavaScript 中XMLHttpRequest 对象是整个 Ajax技术的核心,用于和服务器交换数据,它提供了异步发送请求的能力
     
    (1)构造方法
    不同浏览器,甚至相同浏览器的不同版本,获取该对象的方式是不同的。
     1 window.onload = function()
     2 {
     3 
     4     var xmlhttp;
     5     if (window.XMLHttpRequest) {  // code for IE7+, Firefox, Chrome, Opera, Safari
     6         xmlhttp = new XMLHttpRequest();
     7     } else {  // code for IE6, IE5
     8         xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
     9     }
    10     
    11     alert(xmlhttp);
    12 }
     
    (2)属性
      readyState:类型short,只读
      responseText:类型String,只读,响应文本  
      responseXML:类型Document,只读
      status:类型short;只读,服务器返回的状态
     
    (3)事件处理器
      onreadystatechange 回调
     

    二、常用方法

    1、建立服务器连接
    open(method,URL,async)  // 建立与服务器的连接
    method:指定请求的HTTP方法,典型的值是GET或POST
    URL:指请求的地址,文件在服务器上的位置
    async:指定是否使用异步请求,其值为 true或false,默认true
     
    GET/POST:
    与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用
    在以下情况中,请使用 POST 请求:
    1.无法使用缓存文件(更新服务器上的文件或数据库)
    2.向服务器发送大量数据(POST 没有数据量限制)
    3.发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠
     
    2、发送请求到服务器
    send(string)  // 发送请求
    string:仅用于POST请求
     
    3、设置请求消息头
    setRequestHeader(header,value)  // 设置请求的头信息

    三、常用属性

    1、onreadystatechange :指定回调函数
     
    2、ready State: XMLHttpRequest 的状态信息

    3、status : HTTP的状态码

     

    4、responseText :获得响应的文本内容
    5、responseXML :获得响应的 XML 文档对象 documednt
     
    注:就绪状态是4而且状态码是200,才可以处理服务器数据
     
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/myJS.js"></script> 
     1 <script type="text/javascript">
     2     window.onload = function() {
     3         // 1、获取request对象
     4         var request = getXMLHttpRequest();
     5         // 4、处理响应结果(根据状态改变)
     6         request.onreadystatechange = function(){
     7             // alert(request.readyState);
     8             if(request.readyState == 4){
     9                 // alert(request.status);  // 查看服务器端响应状态
    10                 if(request.status==200) {
    11                     alert(request.responseText);
    12                 }
    13             }
    14         };
    15         
    16         // 2、建立连接
    17         request.open("get", "${pageContext.request.contextPath}/servlet/demo1");
    18         // 3、发送请求
    19         request.send(null);
    20         
    21         // alert(request);
    22     };
    23 </script>
     
    使用Ajax验证用户名是否存在实现步骤:
    1、使用文本框的onBlur事件
    2、使用Ajax技术实现异步交互
    (1)创建XMLHttpRequest对象
    (2)通过 XMLHttpRequest对象设置请求信息
    (3)向服务器发送请求
    (4)创建回调函数,根据响应状态动态更新页面
    1 用户名:<input type="text" name="userName" onblur="checkName()" id="userName" /><span id="msg"></span><br>  // span在用户名输入框后提示类容
    2 密码:<input type="password" name="pwd" />
     1 <script type="text/javascript" src="${pageContext.request.contextPath }/js/myJS.js"></script>
     2 
     3 <script type="text/javascript">
     4     function checkName() {
     5         var name = document.getElementById("userName");
     6        // 创建XMLHttpRequest对象
     7         var xhr = getXMLHttpRequest();
     8         
     9         xhr.onreadystatechange = function() {  // onreadystatechange是回调函数
    10             if(xhr.readyState==4) { // 请求一切正常
    11                 if(xhr.status==200) {  // 服务器响应一切正常
    12                 //    alert(xhr.responseText);  // 得到响应结果
    13                     var msg = document.getElementById("msg");  // 回显到浏览器
    14                     if (xhr.responseText=="true") {
    15                         msg.innerHTML = "<font color='red'>该用户名已存在</font>";
    16                     } else {
    17                         msg.innerHTML = "该用户名可用";
    18                     }
    19                 }
    20             }
    21         }
    22         // 创建连接
    23         xhr.open("get", "${pageContext.request.contextPath }/cknameServlet?name="+name.value);
    24         // 发送请求
    25         xhr.send(null);
    26     }
    27 </script>
    1 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    2     PrintWriter out = response.getWriter();  // response输出到浏览器
    3     String name = request.getParameter("name");
    4     if ("tom".equals(name)) {
    5         out.print(true);  // true是字符串形式
    6     } else {
    7         out.print(false);
    8     }
    9 }

     改进:把<input>标签中的onblur事件提取到js代码中

     1 window.onload=function(){  // 加载就执行
     2     var nameElement = document.getElementsByName("userName")[0];  // userName数组的第一个元素
     3     nameElement.onblur = function(){  // 替代<input>中的onblur事件
     4         var name = this.value;  // this等价于nameElement
     5     // 创建XMLHttpRequest对象
     6     var xhr = getXMLHttpRequest();
     7     // 处理结果
     8     xhr.onreadystatechange = function(){
     9         if(xhr.readyState==4){  // 请求一切正常
    10             if(xhr.status==200){  // 服务器响应一切正常
    11                 //alert(xhr.responseText);  // 得到响应结果
    12                 var msg = document.getElementById("msg");
    13                 if(xhr.responseText=="true"){
    14                     msg.innerHTML =  "<font color='red'>用户名已存在</font>";
    15                     //msg.innerText = "<font color='red'>用户名已存在</font>";
    16                 }else{
    17                     msg.innerHTML = "可以使用";
    18                 }
    19             }
    20         }
    21 }
     
     
     
     
     
     
     
     
    有志者,事竟成,破釜沉舟,百二秦关终属楚;苦心人,天不负,卧薪尝胆,三千越甲可吞吴。
  • 相关阅读:
    HUAS 1482 lsy的后宫(DP+矩阵快速幂)
    HUAS 1483 mex(离线+线段树)
    oracle 分页
    oracle 表查询(二)
    oracle 表查询(一)
    oracle 表的管理
    oracle 用户管理
    oracle sql*plus常用命令
    挑选数据库
    oracle sequence用法
  • 原文地址:https://www.cnblogs.com/1989guojie/p/6152878.html
Copyright © 2011-2022 走看看