ajax

ajax简介

ajax是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术

异步传输是面向字符的传输,它的单位是字符;而同步传输是面向比特的传输,它的单位是桢,它传输的时候要求接受方和发送方的时钟是保持一致的。

什么是ajax?

  • ajax=异步JavaScript和XML。
  • ajax是一种用于创建快速动态网页的技术。

    AJAX XHR

    XHR 创建对象

  • XMLHttpRequest是ajax的基础
  • XMLHttpRequest对象
  • 所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject)。
  • 创建XMLHttpRequest对象
  • 创建 XMLHttpRequest 对象的语法:

         variable=new XMLHttpRequest();
  • 老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 对象:

         variable=new ActiveXObject("Microsoft.XMLHTTP"); 

    实例

         //创建xhr对象
             var xhr = null
                 //浏览器兼容判断
             if (window.XMLHttpRequest) {
                 xhr = new XMLHttpRequest()
             } else if (window.ActiveXObject) {
                 xhr = new ActiveXObject("Microsoft.XMLHTTP")
             } else {
                 alert("你的浏览器不支持ajax,请升级你的浏览器")
                 return
             } 

    XHR请求

    XMLHttpRequest对象用于和服务器交换数据
  • 向服务器发送请求

      xmlhttp.open("GET","test1.txt",true);
      xmlhttp.send();
  • 方法open
  • 方法:open(method,url,async)
  • 描述:规定请求的类型、URL 以及是否异步处理请求。
  •  method:请求的类型;GET 或 POST
  •  url:文件在服务器上的位置
  •  async:true(异步)或 false(同步)
  • 方法send

  • 方法: send(string)
  • 描述:将请求发送到服务器。
  •  string:仅用于 POST 请求
  • get请求

      xmlhttp.open("GET","demo_get.asp",true);
      xmlhttp.send();
  • post请求

      xmlhttp.open("POST","ajax_test.asp",true);
      xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
      xmlhttp.send("fname=Bill&lname=Gates");
  • 方法
  • setRequestHeader(header,value)
  • 描述
  • 向请求添加 HTTP 头。 header: 规定头的名称。 value: 规定头的值

XHR相应

服务器相应
  • 属性:responseText。描述:获得字符串形式的响应数据。

      document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
  • 属性:responseXML。描述:获得 XML 形式的响应数据。

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

XHR readyState

AJAX - onreadystatechange 事件
  • onreadystatechange事件
    1201653-20171017214415834-1443584561.png

      xmlhttp.onreadystatechange=function()
        {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
          {
          document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
          }
        }
  • 使用Callback函数

      function myFunction()
      {
      loadXMLDoc("ajax_info.txt",function()
        {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
          {
          document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
          }
        });
      }

    实例

               // method   String  xhr放请求的方式
               // url      String  xhr发送请求的接口地址
               // data     Object  xhr需要发送到服务器的参数 
               // callback function xhr请求完成之后的回调函数
               function xhr(method, url, data, callback) { // xhr("GET","/add?type=news")
                   var xhr = null
                   var params = format(data) //  params = "name=张三&age=26"
                       //兼容判断
                   if (window.XMLHttpRequest) {
                       xhr = new XMLHttpRequest()
                  } else if (window.ActiveXObject) { //兼容<IE7以下版本浏览器
                       xhr = new ActiveXObject("Microsoft.XMLHTTP")
                   } else {
                       return null
                   }
               //判断是否为get,如果是,将发送的参数拼接到url地址
               if (method.toLowerCase() === "get") {
                   url = url.indexOf("?") > -1 ? url + "&" + params : url + "?" + params
                   params = null
               }
               //初始化
               xhr.open(method, url, true) //如果是get请求  url= "/testGet?name=李四&age=26"
       //监听
               xhr.onreadystatechange = function() {
                   //定义ajax请求完成之后的一些操作
                   if (xhr.readyState === 4 && xhr.status === 200) {
                          callback(xhr.responseText, xhr)
                   }
              }
    
               //如果是post
               if (method.toLowerCase() === "post") {
                   xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
               }
               //发送xhr请求
               xhr.send(params)
    
               function format(obj) {
                   var str = ""
                   for (var key in obj) {
                       str += key + "=" + obj[key] + "&"
                   }
                   return str.substring(0, str.length - 1)
               }
           }

    1201653-20171115091045484-682154588.png

转载于:https://www.cnblogs.com/DCL1314/p/7684109.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值