今天我们来聊一聊JavaScript 网络请求实现方式有哪些?

1. XMLHttpRequest (XHR)

这是最传统的 AJAX 请求方式,虽然现在有更现代的替代方案,但仍然被广泛支持。

// 创建 XHR 对象
const xhr = new XMLHttpRequest();

// 配置请求
xhr.open('GET', 'https://api.example.com/data', true); // 异步请求

// 设置请求头(可选)
xhr.setRequestHeader('Content-Type', 'application/json');

// 定义响应处理
xhr.onload = function() {
  if (xhr.status >= 200 && xhr.status < 300) {
    // 请求成功
    console.log('成功响应:', xhr.responseText);
  } else {
    // 请求失败
    console.error('请求失败:', xhr.statusText);
  }
};

// 定义错误处理
xhr.onerror = function() {
  console.error('请求出错');
};

// 发送请求
xhr.send();

最初学习网络请求的时候我也从这种原生js来实现网络请求开始学的,虽然传统但是推荐大家也学一学

POST 请求示例:

const xhr = new XMLHttpRequest();
xhr.open('POST', 'https://api.example.com/data', true);
xhr.setRequestHeader('Content-Type', 'application/json');

xhr.onload = function() {
  // 处理响应
};

const data = JSON.stringify({ key: 'value' });
xhr.send(data);

2. Fetch API

Fetch API 是现代浏览器提供的更简洁的替代方案,基于 Promise。

// GET 请求
fetch('https://api.example.com/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('网络响应不正常');
    }
    return response.json(); // 解析 JSON 数据
  })
  .then(data => {
    console.log('成功获取数据:', data);
  })
  .catch(error => {
    console.error('请求出错:', error);
  });

POST 请求示例:

fetch('https://api.example.com/data', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ key: 'value' }),
})
  .then(response => response.json())
  .then(data => console.log('成功:', data))
  .catch(error => console.error('错误:', error));

带 async/await 的 Fetch:

async function fetchData() {
  try {
    const response = await fetch('https://api.example.com/data');
    if (!response.ok) {
      throw new Error('网络响应不正常');
    }
    const data = await response.json();
    console.log('数据:', data);
  } catch (error) {
    console.error('获取数据出错:', error);
  }
}

fetchData();

3. Axios

Axios 是一个流行的第三方 HTTP 客户端库,基于 Promise。

首先需要引入 Axios:(必须要引入这个链接不然请求不了哦哦!!!)

<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>

或者通过 npm 安装:

npm install axios

但是我还是推荐第一个直接引入的方式,因为很快且方便,复制粘贴就行了,你们说是不是

使用示例:

// GET 请求
axios.get('https://api.example.com/data')
  .then(response => {
    console.log('响应数据:', response.data);
  })
  .catch(error => {
    console.error('请求出错:', error);
  });

// POST 请求
axios.post('https://api.example.com/data', { key: 'value' })
  .then(response => {
    console.log('响应数据:', response.data);
  })
  .catch(error => {
    console.error('请求出错:', error);
  });

带 async/await 的 Axios:

async function getData() {
  try {
    const response = await axios.get('https://api.example.com/data');
    console.log('数据:', response.data);
  } catch (error) {
    console.error('获取数据出错:', error);
  }
}

getData();

4. jQuery AJAX(重点来了噢噢)

如果你项目中已经使用了 jQuery,可以使用其 AJAX 方法。

首先需要引入 Axios:(必须要引入这个链接不然请求不了哦哦!!!)

<script src="https://cdn.staticfile.net/jquery/1.10.2/jquery.min.js">

// GET 请求
$.ajax({
  url: 'https://api.example.com/data',
  method: 'GET',
  success: function(data) {
    console.log('成功:', data);
  },
  error: function(error) {
    console.error('错误:', error);
  }
});

// POST 请求
$.ajax({
  url: 'https://api.example.com/data',
  method: 'POST',
  data: { key: 'value' },
  success: function(data) {
    console.log('成功:', data);
  },
  error: function(error) {
    console.error('错误:', error);
  }
});

5. WebSocket

对于需要实时双向通信的场景,可以使用 WebSocket。

// 创建 WebSocket 连接
const socket = new WebSocket('wss://api.example.com/socket');

// 连接打开时
socket.onopen = function(event) {
  console.log('连接已建立');
  // 发送数据
  socket.send(JSON.stringify({ type: 'greeting', message: 'Hello Server!' }));
};

// 接收消息
socket.onmessage = function(event) {
  const data = JSON.parse(event.data);
  console.log('收到消息:', data);
};

// 连接关闭时
socket.onclose = function(event) {
  console.log('连接已关闭', event);
};

// 错误处理
socket.onerror = function(error) {
  console.error('WebSocket 错误:', error);
};

比较与选择建议

  1. 现代项目:推荐使用 Fetch API 或 Axios,它们基于 Promise,语法简洁,功能强大。

  2. 旧浏览器支持:如果需要支持旧浏览器,考虑 XHR 或 jQuery AJAX。

  3. 复杂需求:Axios 提供了更多功能,如请求/响应拦截、自动转换 JSON 数据等。

  4. 实时通信:考虑 WebSocket 或 Socket.io 等库。

注意事项

  1. 跨域问题:浏览器有同源策略限制,需要服务器设置 CORS 或使用 JSONP(仅限 GET)。

  2. 错误处理:始终处理网络请求可能出现的错误。

  3. 安全性:不要在前端代码中硬编码敏感信息。

  4. 性能:考虑请求缓存、节流和防抖等优化技术。

以上是 JavaScript 中主要的网络请求实现方式,根据项目需求选择最适合的方案。  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@程序员ALMJ

打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值