Ajax之路

第一部分:

Ajax全称Asynchronous Javascript and XML,中文意思为“异步的Javascript 和XML”。
Ajax这组技术是web2.0的核心之一。

  Ajax不是一项技术,它是多种技术组合而成:

  1. 运用XHTML和CSS实现基于各种标准的展示。
  2. 运用文档对象模型(Document Object Model,DOM)实现动态显示和交互。
  3. 运用XML和XSLT实现数据交换和操作
  4. 运用XMLHttpRequest(Ajax核心,简称XHR对象)实现异步数据检索
  5. JavaScript将所有这些绑定到一起。
  Ajax:使用ajax技术不用刷新整个页面,只需对局部页面进行刷新。也就是说用XHR对象取得新数据,然后通过DOM方式将新数据插入到页面中,达到局部更新的效果。

  Ajax优点:

减少冗余请求,节省网络带宽,提高网页加载效率,从而缩短用户等待时间,促进页面与数据分离,提高用户体验

  Ajax缺点:

  • Ajax干掉了浏览器后退机制(back按钮);
  • 特定页面很难加入收藏夹;
  • Ajax采用javascript和XHR,这些取决于浏览器的支持,同时存在兼容性问题;
  • 一些流媒体和手机设备支持的不太良好

 

第二部分:

  1.创建XMLHttpRequest对象:

 1 var xhr=null;
 2 if (window.XMLHttpRequest) {
 3     //IE7+,Firefox,chrome,Opera,Safari等现代浏览器执行代码
 4     xhr=new XMLHttpRequest();
 5 }else{
 6     //IE6,IE5浏览器执行代码
 7     xhr=new ActiveXObject("Microsoft.XMlHTTP");
 8 }
 9 
10 /*  第二种方法
11 xhr=window.XMLHttpRequest ? new XMLHttpRequest() :new ActiveXObject("Microsoft.XMLHTTP");
12 */
13 
14 /*  第三种方法:
15 try{
16     xhr=XMLHttpRequest();
17 }catch(e){
18     xhr=ActiveXObject("Microsoft.XMLHTTP");
19 }
20 */

 

  2.向服务器发送请求:

xhr.open(method,url,async);

  规定请求的类型、url、是否是异步处理请求;
  method:GET或者POST,url:文件在服务器上位置,async:true为异步(默认),false为同步

同步和异步
同步:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。
异步:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式

  ps:不推荐使用async=false,因为这样JavaScript会等到服务器响应就绪才继续进行,如果服务器繁忙或缓慢,那么应用程序会挂起或停止。

xhr.send(string)
将请求发送到服务器;string:仅用于POST请求

  GET还是POST?

  大部分情况下,都能使用GET,并且相比POST更快更简单

  但是,POST运用在以下场景:

    • 使用缓存文件(更新服务器上文件或数据库)
    • 向服务器发送大量数据(POST没有数据限制,GET请求URL限制长度为2048字符)
    • 安全性操作

   如果要通过GET方法来发送信息,需在URL中添加信息:

  

xhr.open("GET","index.php?name=a&age=b",true);
xhr.send();

  如果要像html表单那样POST数据,需使用setRequestHeader(Header,value)来添加HTTP头进行模拟。然后在send()发送你想要发送的数据:

xhr.open("POST","index.php",true);
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.send("name=a&age=b");

  

  3.服务器(XHR)响应:

  XMLHttpReques对象有responseTextresponseXML属性。

    服务器响应不是XML,使用responseText属性,以字符串形式返回:

document.getElementById("test").innerHtml=xhr.responseText;

    服务器响应是XML,使用responseXML属性:

xmlDoc=xhr.responseXML;
txt="";
x=xmlDoc.getElementsByTagName("test1");
for (i=0;i<x.length;i++)
{
    txt=txt + x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("myDiv").innerHTML=txt;

  XMLHttpRequest对象还有readyStatestatus属性:

  每当readyState属性改变时,就会触发onreadyStateChange事件

  readyState:表示XMLHttpRequest的状态(0,1,2,3,4):  

    • 0:请求未初始化;
    • 1:服务器连接已建立;
    • 2:请求已接收;
    • 3:请求处理中;
    • 4:请求已完成,响应已就绪

  status: 常见200(“OK”),404(未找到页面)

1 xhr.onreadystatechange=function(){
2     if (xhr.readyState==4 && status==200) {
3         document.getElementById("test").innerHtml=xhr.responseText;
4     }
5 }

   示例:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title>hello</title>
 5     <meta charset="utf-8">
 6 </head>
 7 <body>
 8     <script type="text/javascript">
 9         function fix(){
10             var xhr=null;
11             if (window.XMLHttpRequest) {
12                 xhr=new XMLHttpRequest();
13             }else{
14                 xhr= new ActiveXObject("Microsoft.XMLHTTP");
15             }
16             xhr.onreadystatechange=function(){
17                 if(xhr.readyState==4 && xhr.status==200){
18                     document.getElementById('test').innerHTML=xhr.responseText;
19                 }
20             }
21             xhr.open("GET",'test.txt',true);
22             xhr.send(); 
23         }
24 
25     </script>
26     <div id="test">修改内容</div>
27     <button type="button" onclick="javascript:fix()">点击进行修改</button>
28 </body>
29 </html>

    ps:这里我将文件1.html和test.txt放置在Xampp下的htdocs目录下,运行xampp control-》开启服务器。

  http://localhost/1.html运行代码,得到以下结果:(Status:200;Type:xhr):

 

posted @ 2017-11-13 13:58  why_not_try  阅读(464)  评论(0编辑  收藏  举报