初学原生Ajax-补充:原生ajax的封装使用

这篇博客介绍了如何使用原生JavaScript封装AJAX请求,从基本的回调函数封装到使用Promise,再到结合async/await的现代异步处理方式,详细展示了三种不同的实现方法,并提供了服务器端的Express设置作为示例。通过这些示例,读者可以更好地理解和应用异步请求处理。
摘要由CSDN通过智能技术生成

原生ajax的封装使用

我们先准备一个服务器

  • server.js
const express = require("express")

const app = express()

app.get("/user",(req,res)=>{
    // res.setHeader("Access-Control-Allow-Methods","*")
    res.setHeader('Access-Control-Allow-Origin','*')
    console.log("服务器收到请求");
    res.send({"name":"hello","age":20})

})

app.listen(8080,()=>{
    console.log("服务器启动,监听8080端口!");
})

启动服务器:node server.js

最基本的封装

<div>
   <button onclick="sendMessage()">发送请求</button>
</div>
<script>
   // 点击触发sendMessage()方法
   function sendMessage(){
       // 调用封装的ajax方法,传入url,回调函数
       getData("http://localhost:8080/user",(res)=>{
           console.log(res);
       })
   }

   /**
   	* @function 封装ajax
    * @url:请求的url地址
    * @callback,请求成功后的回调函数
    */
   function getData(url,callback){
       let xhr = new XMLHttpRequest()
       xhr.open("get",url)
       xhr.send()
       xhr.responseType = "json" // 返回response对象
       xhr.onreadystatechange = function(){
           if(this.readyState === 4 && this.status === 200){
               // console.log(xhr.response);
               callback(xhr.response) // 回调函数
           }
       }
   }
</script>

ES6中的promise函数封装

  • 纯pormise实现
<script>
  // 点击触发sendMessage()方法
  function sendMessage() {
    // 调用封装的ajax方法,传入url,回调函数
    getData("http://localhost:8080/user", (res) => {
      console.log(res);
    });
  }

  /**
   * @url:请求的url地址
   * @callback,请求成功后的回调函数
   */
  function getData(url, callback) {
    const p = new Promise((resolve, reject) => {
      let xhr = new XMLHttpRequest();
      xhr.open("get", url);
      xhr.send();
      xhr.responseType = "json"; // 返回response对象
      xhr.onreadystatechange = function () {
        if (xhr.readyState === 4) {
          if (xhr.status >= 200 && xhr.status < 300) {
            // 成功则获取响应体
            resolve(xhr.response);
          } else {
            // 失败就返回状态码
            reject(xhr.status);
          }
        }
      };
    });

    p.then(
      function (value) {
        callback(value); // value就是xhr.response
      },
      function (err) {
        console.log(err);
      }
    );
  }
</script>
  • promise+async+await实现
<div>
  <button onclick="sendMessage()">发送请求</button>
</div>
<script>
  // 点击触发sendMessage()方法
  async function sendMessage() {
    // 调用封装的ajax方法,传入url,回调函数
    let result = await getData("http://localhost:8080/user");
    console.log(result);
  }

  /**
   * @url:请求的url地址
   */
  function getData(url) {
    return new Promise((resolve, reject) => {
      let xhr = new XMLHttpRequest();
      xhr.open("get", url);
      xhr.send();
      xhr.responseType = "json"; // 返回response对象
      xhr.onreadystatechange = function () {
        if (xhr.readyState === 4) {
          if (xhr.status >= 200 && xhr.status < 300) {
            // 成功则获取响应体
            resolve(xhr.response);
          } else {
            // 失败就返回状态码
            reject(xhr.status);
          }
        }
      };
    });
  }
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值