博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ajax基础和基本使用
阅读量:4349 次
发布时间:2019-06-07

本文共 5233 字,大约阅读时间需要 17 分钟。

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         //使用post31             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  用户名: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");

转载于:https://www.cnblogs.com/hqr9313/archive/2012/07/10/2584231.html

你可能感兴趣的文章
PHP 重置数组为连续数字索引的几种方式
查看>>
南阳理工acm 88-汉诺塔(一)
查看>>
160809308周子济第六次作业
查看>>
大型Web应用运行时 PHP负载均衡指南
查看>>
为phpStorm 配置PHP_CodeSniffer自动检查代码
查看>>
测试工具网址大全(转)
查看>>
ServiceStack DotNet Core前期准备
查看>>
webpack中‘vant’全局引入和按需引入【vue-cli】
查看>>
Date、String和Timestamp类型转换
查看>>
计算机的组成
查看>>
CSS命名规范
查看>>
初始化构造函数中定义的实体集合,方便嵌套类型的遍历
查看>>
状压dpHDU - 4856
查看>>
java.nio.ByteBuffer 类 缓冲区
查看>>
PL/SQL系列1-PL/SQL介绍
查看>>
关于render函数的总结
查看>>
JavaScript 小刮号
查看>>
BZOJ USACO 银组 水题集锦
查看>>
Android为TV端助力 Linux命令查看包名类名
查看>>
【zabbix】自动注册,实现自动发现agent并添加监控(agent不需要任何配置)
查看>>