基于原生JS实现Ajax的封装(包含 Fetch)

在原生 JavaScript 中,我们可以封装一个自定义的 Ajax 函数来简化并统一处理各种类型的 HTTP 请求。以下是一个基于 XMLHttpRequest 或者 Fetch API 的 AJAX 封装示例:

  1. 基于 XMLHttpRequest:创建一个新的 XMLHttpRequest 对象,设置请求方法、URL、请求头等信息,然后监听 onload 和 onerror 事件分别处理成功和失败的情况。成功时解析响应文本为 JSON 并返回,失败时抛出错误信息。

// 使用 XMLHttpRequest 实现的 AJAX 封装
function ajax(method, url, data = null, headers = {}) {
  return new Promise((resolve, reject) => {
    const xhr = new XMLHttpRequest();

    xhr.open(method, url, true);
    Object.keys(headers).forEach(key => xhr.setRequestHeader(key, headers[key]));

    xhr.onload = function() {
      if (xhr.status >= 200 && xhr.status < 300) {
        resolve(JSON.parse(xhr.responseText));
      } else {
        reject(xhr.statusText);
      }
    };

    xhr.onerror = function() {
      reject(xhr.statusText);
    };

    xhr.send(data ? JSON.stringify(data) : null);
  });
}

// 使用示例:
// XMLHttpRequest 版本
ajax('GET', 'https://api.example.com/data')
  .then(data => console.log(data))
  .catch(error => console.error(error));

2.基于 Fetch API:使用 fetch 函数发起请求,传入 URL、请求方法和可选的请求头、数据等参数。通过检查 response.ok 来判断请求是否成功,成功则解析响应体为 JSON,否则抛出错误。整个过程使用 async/await 语法进行异步处理。

// 使用 Fetch API 实现的 AJAX 封装
async function fetchAjax(method, url, data = null, headers = {}) {
  const options = {
    method,
    headers: Object.entries(headers).reduce(
      (acc, [key, value]) => ({ ...acc, [key]: value }),
      { 'Content-Type': 'application/json' }
    ),
  };

  if (data !== null) {
    options.body = JSON.stringify(data);
  }

  try {
    const response = await fetch(url, options);
    if (!response.ok) throw new Error(response.statusText);

    const json = await response.json();
    return json;
  } catch (error) {
    throw new Error(error.message);
  }
}

// Fetch API 版本
fetchAjax('GET', 'https://api.example.com/data')
  .then(data => console.log(data))
  .catch(error => console.error(error));

 您可以根据项目需求和浏览器兼容性选择使用其中任一版本的 ajax 函数。记得在实际使用时替换示例中的 URL 为您的 API 地址,并根据需要调整请求方法、数据和头部信息。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Ajax是一种用于在浏览器和服务器之间进行异步通信的技术,可以在不重新加载整个页面的情况下更新部分页面内容。而Axios和Fetch则是用于发出Ajax请求的JavaScript库,它们提供了一种简单的方法来实现Ajax请求。Axios支持Promise API,并具有拦截器和取消请求功能,而Fetch提供了更简单的API,但没有拦截器和取消功能。 ### 回答2: ajax、axios和fetch都是用于发送异步请求的工具,但在使用上有一些区别。 1. Ajax是一种基于原生的XMLHttpRequest对象实现的异步请求技术。它可以发送HTTP请求并接收服务器返回的数据。Ajax可以通过监听XMLHttpRequest对象的状态变化来实现异步请求和处理响应。但是,Ajax使用起来繁琐,需要编写大量的代码,并且兼容性也有一定问题。 2. Axios是一个基于Promise的HTTP客户端库。它可以在浏览器和Node.js中使用。Axios提供了简洁的API,可以轻松发送HTTP请求,并处理响应。Axios在使用上比较简单,提供了更多的功能,比如拦截器、取消请求、带进度的上传等。Axios也兼容各种现代浏览器。 3. Fetch是基于原生Fetch API实现的异步请求方法。它提供了一组可用于发送和处理HTTP请求的接口。Fetch使用Promise对象来处理响应,使得异步请求能够更加简洁易用。Fetch的API设计更加简单明了,但还比较新,兼容性不如Axios。 综上所述,Ajax是一种传统的异步请求技术,使用上比较繁琐;Axios是一个功能丰富且易用的HTTP客户端库;Fetch是一种新的基于Fetch API的异步请求方法,使用上简单但兼容性相对较差。在选择使用时,可以根据具体需求和项目情况来选择。 ### 回答3: Ajax、axios和fetch 都是用于发送异步请求的工具,主要用于前端与后端进行数据交互。虽然它们都有相似的功能,但也有一些区别。 Ajax 是一种基于 XMLHttpRequest 对象的技术,它可以在不刷新整个页面的情况下与服务器进行数据交互。Ajax 使用起来相对简单,但需要手动处理各种回调函数。 Axios 是一个基于 Promise 的 HTTP 客户端工具,它可以在浏览器和 Node.js 中使用。axios 提供了更方便的API来处理请求和响应,并支持拦截器、取消请求和并发请求等功能。它还可以自动将请求的数据转换为 JSON 格式,并提供了更好的错误处理机制。 Fetch 是浏览器内置的一个原生 API,用于发送和接收数据。它基于 Promise,也提供了一些处理请求和响应的方法。Fetch 使用起来更加简洁,代码量更少,但在功能上相对较少,需要手动处理一些细节,比如请求的头部、错误处理等。 从使用上来说,Axios 和 Fetch 更加易用,提供了更好的抽象和封装,使得代码更加简洁易懂。它们还提供了更多的选项和功能,比如设置请求超时、设置请求头部、上传文件等。 总的来说,Ajax、axios和fetch 都是可以用来进行异步请求的工具,但它们在使用方式、功能以及易用性上存在一些差异。选择哪个工具主要取决于具体的需求和个人偏好。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值