手写创建一个 ajax 请求

发布于 2023-12-04 14:10:19 字数 2301 浏览 22 评论 0

手动创建一个 ajax 请求

一般来说,我们可以使用 XMLHttpRequest 对象来创建 Ajax 请求,其流程如下:

  1. 创建 XMLHttpRequest 对象,通过调用其构造函数来实现。
  2. 使用 open()方法指定请求的方法、URL 以及是否异步请求。
  3. 使用 setRequestHeader()方法设置请求头,例如设置请求的 Content-Type。
  4. 设置响应的回调函数,一般有 onreadystatechange 和 onload 两种方式。
  5. 使用 send()方法发送请求。

实现如下:

var getJSON = function(url) {
  var promise = new Promise(function(resolve, reject) {
    function handler() {
      if (this.readyState !== 4) {
        return;
      }
      if (this.status === 200) {
        resolve(this.response);
      } else {
        reject(new Error(this.statusText));
      }
    }

    var client = new XMLHttpRequest();
    //如果是 IE 的内核 ActiveXObject('Microsoft.XMLHTTP');
    client.open("GET", url);
    client.onreadystatechange = handler;
    client.responseType = "json";
    client.setRequestHeader("Accept", "application/json");
    //如果是 post 请求:client.setRequestHeader('Content-Type','application/X-WWW-form-urlencoded')
    client.send();
  });
  return promise;
};

getJSON("/posts.json").then(function(json) {
  console.log('Contents: ' + json);
}, function(error) {
  console.error(' 出错了 ', error);
});

xhr.open() 第一个参数是请求的方法,可以是 GET、POST、PUT 等;第二个参数是请求的 URL;第三个参数表示是否异步请求。

setRequestHeader() 方法用于设置请求头,例如设置 Content-Type,常见的值有 application/json、application/x-www-form-urlencoded 等

onreadystatechange 回调函数 会在 XMLHttpRequest 对象的状态发生变化时触发

最后,调用 send()方法发送请求。

回调函数一般有哪些?

设置响应的回调函数,一般有 onreadystatechangeonload 两种方式;在 XMLHttpRequest 对象中,onreadystatechange 和 onload 是两种不同的事件回调函数。

onreadystatechange :事件会在 readyState 的值改变时被触发,它会在请求过程中的每个状态改变时都被触发,从而可以通过 readyState
的值来判断请求的过程。一般来说,onreadystatechange 回调函数需要根据 readyState 的不同值做出不同的处理,如:

  • readyState 为 1 (UNSENT):代理被创建,但尚未调用 open() 方法;
  • readyState 为 1 (已经调用 open() 方法)时,可以做一些请求初始化的工作;
  • readyState 为 2 (已经调用 send() 方法)时,可以获取响应头信息;
  • readyState 为 3 (正在接收数据)时,可以获取响应的部分数据;
  • readyState 为 4 (已经接收到全部响应数据)时,可以对响应的数据进行处理。

onload: 而 onload 事件则是在整个请求过程完成后被触发,表示整个请求已经完成。这个回调函数通常用来处理响应数据,如将响应数据渲染到页面中等。

因此,onreadystatechange 和 onload 这两种回调函数的作用是不同的,需要根据不同的场景进行选择和使用。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

失眠症患者

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

金兰素衣

文章 0 评论 0

ゃ人海孤独症

文章 0 评论 0

一枫情书

文章 0 评论 0

清晰传感

文章 0 评论 0

mb_XvqQsWhl

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文