昂扬生长  

基础知识

  知识点梳理见图:

自己动手实践案例

案例1: 访问本地文件

<!DOCTYPE html>
<html>
<body>

<div id="demo">
<h1>XMLHttpRequest 对象</h1>
<button type="button" onclick="loadDoc()">更改内容</button>
</div>

<script>
function loadDoc() {

  const myHttp = new XMLHttpRequest();

  myHttp.onload = function () {
    //响应
    document.getElementById("demo").innerHTML = this.responseText
  };
    //这里是访问跟文件同一层级下的文件夹下的某个文件
  myHttp.open("GET", "./demo/aa.txt",true);

  myHttp.send();
}
</script>

</body>
</html>

文件的位置:

  • 代码效果如下:

 

 

案例2:访问服务端数据

<!DOCTYPE html>
<html>
<body>

<div id="demo">
<h1>XMLHttpRequest 对象</h1>
<button type="button" onclick="loadDoc()">更改内容</button>
</div>

<script>
function loadDoc() {

  const myHttp = new XMLHttpRequest();
  
  myHttp.onload = function () {
    //响应
    document.getElementById("demo").innerHTML = this.responseText
  };
  console.log(myHttp.getAllResponseHeaders())
  //定义method url 
  myHttp.open("GET", "http://123.207.32.31:5000/test",true);
  
  //设置请求头 - 请求头的设置要在open之后,此处 是设置token,必须是 key-val 形式
  myHttp.setRequestHeader(
    "Authorization","eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwibmFtZSI6ImNvZGVyd2h5Iiwicm9sZSI6eyJpZCI6MSwibmFtZSI6Iui2hee6p-euoeeQhuWRmCJ9LCJpYXQiOjE2ODYyMDgxMzMsImV4cCI6MTY4ODgwMDEzM30.Ve6T7h4dGuYmk4Lwch1rlr2pvf11XKfr2F2mxl1kAgp46rvgFxjmUqjhRmq90whydPVYTtrvPnWp1aGY50eVtQcY1olqqwr8ZOngERHIyHgzQxY3zEDLrtcZ5nrNqGeAIutc6kDOgGQFPyOvFOnKKMH7Puwgjydv41XGpEEqNus"
  )
  //定义传输数据
  let str = {
    "name": "dingding",
    "password": "4569841"
  }
  //传递参数
  myHttp.send(JSON.stringify(str));
}
</script>

</body>
</html>
  • 代码效果如下:

案例3:自己尝试封装一个AJAX

let createAjax = function () {
  let xhr = null;
  try {
    //IE系列浏览器
    xhr = new ActiveXObject("microsoft.xmlhttp");
  } catch (e1) {
    try {
      //非IE浏览器
      xhr = new XMLHttpRequest();
    } catch (e2) {
      window.alert("您的浏览器不支持ajax,请更换!");
    }
  }
  return xhr;
};

const ajax = function (config) {
  debugger;
  let type = config.type;
  let dataType = config.dataType;

  const url = config.url;
  const data = config.data;
  const successFn = config.success;
  const errFn = config.err;
  const headers = config.headers;

  if (type === null) {
    //默认类型为get
    type = "get";
  }
  if (dataType === null) {
    dataType = "text";
  }

  //创建XHR对象
  const myXHR = createAjax();

  myXHR.open(type, url, true);

  //设置header
  if (headers !== null) {
    for (header in headers) {
      console.log(header);
      myXHR.setRequestHeader(header);
    }
  }

  //类型
  if (type.toLowerCase() == "get") {
    myXHR.send(null);
  } else if (type.toLowerCase() === "post") {
    // myXHR.setRequestHeader("content-type", "application/x-www-form-urlencoded");
    myXHR.setRequestHeader("content-type", "application/json");
    myXHR.send(data);
  }

  //返回数据
  myXHR.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
      if (dataType.toLowerCase() === "text") {
        if (successFn !== null) {
          return successFn(this.responseText);
        }
      }
      if (dataType.toLowerCase() === "xml") {
        if (successFn !== null) {
          return successFn(this.responseXML);
        }
      }
      if (dataType.toLowerCase() === "json") {
        if (successFn !== null) {
          return successFn(eval("(" + this.responseText + ")"));
        }
      }
    } else {
      return errFn(this.status);
    }
  };
};
<!DOCTYPE html>
<html>
  <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
   
  </head>
  <body>
    <div>
      <h1 id="demo">XMLHttpRequest 对象</h1>
      <button type="button" onclick="loadDoc()">更改内容</button>
    </div>
    <script  src="./03_ajax简单封装.js"></script>
     <script>
      function loadDoc() {
        ajax({
          type: "post",
          url: "http://123.207.32.xxx:5000/login",
          heasders: {
            Authorization:"123456123"
          },
          data:JSON.stringify({
            "name":'zooey',
            "password":"123456"
          }),
          dataType:'json',
          success:function(res){
            const el = document.querySelector("#demo")
            el.innerHTML = res.data.id
          },
          err:function(err){
            let el = document.querySelector("#demo")
            el.innerHTML = err
          }
        });
      }
    </script>
  </body>
</html>

效果如下:

 

 

posted on 2023-06-08 15:40  昂扬生长  阅读(62)  评论(0编辑  收藏  举报