zoukankan      html  css  js  c++  java
  • ajax基础和基本使用

    1. ajax是什么?
        1)异步的javascript和xml
        为了解决传统的web应用当中“等待-响应-等待”的弊端而创建的一种技术,其实质可以
        理解为:使用浏览器内置的一个对象(XmlHttpRequest)向服务器发送请求,服务器返
        回xml数据或者是文本数据,然后在浏览器端使用这些数据更新部分页面,整个过程,页
        面无任何的刷新。
        
        2)传统的“等待-响应-等待”:
            指的是,在传统的web应用当中,比如注册,用户填写完整个注册信息,然后提交,
            此时,浏览器会将整个注册页面抛弃,等待服务器返回一个新的完整的页面。在等待
            过程当中,用户不能够做其他操作。服务器生成新的页面发送给浏览器,浏览器需要
            重新解析整个页面生成相应的界面。
            
    2.XmlHttpRequest对象
        1)如何获得该对象
            该对象并没有标准化,要区分浏览器。
            ie浏览器不指出XMLHttpRequest类型,其他浏览器支持。
             function getXmlHttpRequest(){
                     var xmlHttpRequest = null;
                     iif((typeof))
             }
        2)属性
            onreadystatechange:注册监听器(绑定事件处理代码)
            readyState:ajax对象与服务器间通讯的状态,该状态有0
            ,1,2,3,4,五个值,当值为4时,表示收到了服务器返回
            所有的数据。
            responseText:获取服务器返回的文本数据
            responseXML:获得服务器返回的xml数据
            statue:获得状态码
            
        3)编程
            step1  获得XmlHttpRequest对象
                var xhr = getXhr();
                
            step2 发请求
            1)发送get请求
            //open(请求方式,请求地址,同步还异步)
            //如果有请求参数,应该添加到请求地址后面
            //true表示异步,false表示同步
                xhr.open('get','check_username.do?username=zs',true);
                xhr.onreadystatechange=f1;
                xhr.send(null);
            2)发送post请求
                xhr.open(‘post','check_username.do',true);
                //为xhr生成的请求数据包添加一个content-type消息头
                xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');
                xhr.send("username=zs");
                
            step3 编写服务器端代码,来处理请求。
            step4 在监听器(时间处理代码当中)处理服务器返回的数据。
                function f1(){
                    //只有状态等于4
                    if(xhr.readyState==4){
                    //获得服务器返回的数据    
                        var txt = xhr.responseText;
                    //var xml = xhr.reqponseXML;
                    //dom操作
                    ...
                    }
                }


    例子:
    JS部分

     1 function $(id){
     2     return document.getElementById(id);
     3 }
     4 function $F(id){
     5     return document.getElementById(id).value;
     6 }
     7 function getXhr() {
     8     var xhr = null;
     9     if (window.XMLHttpRequest) {
    10                     //非ie浏览器
    11         xhr = new XMLHttpRequest();
    12     } else {
    13                     //ie浏览器
    14         xhr = new ActiveXObject("Microsoft.XMLHttp");
    15     }
    16     return xhr;
    17 }




    javascript部分
    使用get

     1 function check_name(){
     2                 
     3                 //step1 得到XMLHttpRequest对象
     4                 var xhr = getXhr();
     5                 //step2 发送请求
     6                 xhr.open('get',
     7                 'check_name.do?username='
     8                 + $F('username'),true);
     9                 xhr.onreadystatechange=function(){
    10                     if(xhr.readyState == 4){
    11                         //只有状态等于4,才能够获得服务器返回的
    12                         //数据。
    13                         if(xhr.status==200){
    14                             //说明服务器返回的数据正常
    15                             var txt = xhr.responseText;
    16                         //更新页面
    17                             $('name_msg').innerHTML = txt;
    18                         }else{
    19                         $('name_msg').innerHTML = '稍后重试';
    20                         }
    21                         
    22                     }else{
    23                         //当readyState的值不等于4,表示xhr对象正在与服务器交互
    24                         $('name_msg').innerHTML ='正在检查..';
    25                     }
    26                 };
    27                 xhr.send(null);
    28             }
    29             
    30         //使用post
    31             function check_name2(){
    32                 
    33                 //step1 得到XMLHttpRequest对象
    34                 var xhr = getXhr();
    35                 //step2 发送请求
    36                 xhr.open('post',
    37                 'check_name.do',true);
    38                 xhr.onreadystatechange=function(){
    39                     if(xhr.readyState == 4){
    40                         //只有状态等于4,才能够获得服务器返回的
    41                         //数据。
    42                         if(xhr.status==200){
    43                             //说明服务器返回的数据正常
    44                             var txt = xhr.responseText;
    45                         //更新页面
    46                             $('name_msg').innerHTML = txt;
    47                         }else{
    48                         $('name_msg').innerHTML = '稍后重试';
    49                         }
    50                         
    51                     }else{
    52                         //当readyState的值不等于4,表示xhr对象正在与服务器交互
    53                         $('name_msg').innerHTML ='正在检查..';
    54                     }
    55                 };
    56                 xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');
    57                 xhr.send('username=' + $F('username'));
    58             }


                
                
    jsp部分:
     

    1  用户名:<input id="username"
    2             name="username"
    3             onblur="check_name();"/>
    4             


                
    Servlet部分

    1 String username =
    2                 request.getParameter("username");
    3             if(username.equals("zs")){
    4                 out.println("用户名已经存在");
    5             }else{
    6                 out.println("可以使用");
    7             }


                
                
                
                
    3.ajax需要注意的问题
    1)缓存问题:
        当采用get方式向服务器发送请求时,ie浏览器会先查询缓存当中有没有
        结果,如果有,则不会向服务器发送请求。
        解决方案:
            a.在请求地址后面加上一个随机数
            b.或者使用post方式
    2)编码问题
        a.连接地址当中有中文
            浏览器一定会使用utf-8对连接地址中的中文进行编码
            解决方式:
            对于tomcat,tomcat_home/config/server.xml,
           在 <Connector/> 中添加URLEncoding="utf-8"
            重新启动服务器。
        b.连接地址中包含了中文参数
            浏览器会对连接地址中的中文参数进行编码,会使用打开
            连接所在页面的编码格式来编码.
            解决方式:
                step1:
                对于tomcat,tomcat_home/config/server.xml,
               在 <Connector/> 中添加URLEncoding="utf-8"
                重新启动服务器。
                step2:要保证连接所在页面以utf-8编码格式打开
                如果页面中不以utf-8来编码,那就对中文参数手动
                转码:<%=URLEncoder.encoding("张三")%>
        c.ajax编程当中如何向服务器发送中文
            在ajax编程中,不是浏览器向服务器发送请求,是XMLHttpRequest对
            象向服务器发送请求,该对象也会对请求中的中文参数进行编码。
            
            使用get方法发送请求时
            ie浏览器内置的MLHttpRequest对象(其实是ActiveXObject)
            会采用gbk编码,而其他浏览器,采用utf-8编码。
                
            解决办法:

                step1:
                对于tomcat,tomcat_home/config/server.xml,
               在 <Connector/> 中添加URLEncoding="utf-8"
                重新启动服务器。
                step2:使用encodeURI(javascript内置的一个函数)
                    encodeURI(url)
                    
            使用post发送请求,此时,浏览器会对中文参数统一进行utf-8编码。
            解决方式:request.setCharacterEncoding("utf-8");

  • 相关阅读:
    分布式文件系统--FastDFS以及Nginx
    正则
    交互式多媒体图书平台的设计与实现
    安装opencv
    基于VsCode的java语言编程调试环境
    码农的自我修养之必备技能 学习笔记
    工程化编程实战callback接口学习笔记
    'java.lang.String' to required type 'javax.sql.DataSource' for property 'dataSource'
    如何评测一个软件工程师的计算机网络知识水平与网络编程技能水平?
    深入理解TCP协议及其源代码
  • 原文地址:https://www.cnblogs.com/hqr9313/p/2584231.html
Copyright © 2011-2022 走看看