【前端】前后端的网络通信基础操作(原生ajax, axios, fetch)

概述

前后端网络请求工具

  • 原生ajax
  • fetch api
  • axios

GET和POST请求

get只能发纯文本

post可以发不同类型的数据,要设置请求头,需要告诉服务器一些额外信息

测试服务器地址

有一些公共的测试 API 可供学习和测试用途。这些 API 允许你发送 HTTP 请求(GET、POST 等),并从服务器获取响应。以下是一些常用的公共测试 API:

  1. JSONPlaceholder:
  2. ReqRes:

原生ajax

前端页面代码

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script src="ajax_get.js"></script>
</body>
</html>

GET

javascript 复制代码
//原生ajax
const xhr = new XMLHttpRequest();
//xhr.open('GET', 'http://wuyou.com/common/get');
xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts/1')
xhr.send();
xhr.onreadystatechange = function(){
    if(xhr.readyState == XMLHttpRequest.DONE && xhr.status === 200){
        console.log(JSON.parse(xhr.responseText));
    }
}

返回结果

POST

javascript 复制代码
const xhr = new XMLHttpRequest();
xhr.open('POST', 'https://jsonplaceholder.typicode.com/posts');
xhr.setRequestHeader('Content-Type', 'application/json'); // 修改 Content-Type
xhr.send(JSON.stringify({
    title: 'foo',
    body: 'bar',
    userId: 1
}));

xhr.onreadystatechange = function() {
    if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 201) {
        console.log(xhr.responseText); // 不解析 JSON,直接输出响应文本
    }
};

返回结果

Axios

前端页面代码

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script src="axios.min.js"></script>
<script src = 'axiosjs.js'></script>
</body>
</html>

直接传输

最简单的axios使用方式,get函数中填写请求的url

javascript 复制代码
//用axios来get一个请求
axios.get('https://jsonplaceholder.typicode.com/posts/1')
    .then(response => {
        console.log('GET Response:', response.data);
    })
    .catch(error => {
        console.error('GET Error:', error);
    });

返回结果

异步传输

用异步的方式传输,在axios中配置地址,请求/响应拦截器

javascript 复制代码
//异步请求处理
//异步发送get请求
(async () => {
    try {
        const ins = axios.create({
            baseURL: 'https://jsonplaceholder.typicode.com',
        });

        // 请求拦截器
        ins.interceptors.request.use((config) => {
            console.log('发送了请求');
            return config;
        });

        // 响应拦截器
        ins.interceptors.response.use(
            (response) => {
                // 在这里可以对响应数据进行处理
                return response.data;
            },
            (error) => {
                // 在这里处理响应错误
                return Promise.reject(error);
            }
        );

        const res = await ins.get('/posts/1');

        const res2 = await ins.post('/posts', {
            title: 'foo',
            body: 'bar',
            userId: 1,
        });

        console.log('GET 的结果:', res);
        console.log('POST 的结果:', res2);
    } catch (error) {
        console.error('发生错误:', error);
    }
})();

返回结果

Fetch

前端页面代码

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script src = 'fetch_get.js'></script>
</body>
</html>

GET请求

javascript 复制代码
fetch('https://jsonplaceholder.typicode.com/posts/1')
.then(res => {
    if(res.ok){
        return res.json()
    }
})
.then(data =>{
    console.log(data)
    }

).catch(error =>{
    console.error(error)
})

结果:

POST请求

在参数处需要传入一些配置项

javascript 复制代码
//post在参数的地方需要传入一些配置项

const postData = {
    title: 'foo',
    body: 'bar',
    userId: 1
};
console.log("test")
fetch('https://jsonplaceholder.typicode.com/posts', {
    method: 'POST',
    headers:{
        'Content-Type': 'application/json'
    },
    body:JSON.stringify({
        postData
    })
    }
).then(res =>{
    if(res.ok){
        return res.json()
    }
})
.then(data =>{
    console.log(data)
    }
)

结果

相关推荐
我命由我1234531 分钟前
微信小程序 - 自定义实现分页功能
前端·微信小程序·小程序·前端框架·html·html5·js
程序员黄同学1 小时前
请谈谈 Vue 中的 key 属性的重要性,如何确保列表项的唯一标识?
前端·javascript·vue.js
繁依Fanyi1 小时前
巧妙实现右键菜单功能,提升用户操作体验
开发语言·前端·javascript·vue.js·uni-app·harmonyos
前端御书房1 小时前
前端防重复请求终极方案:从Loading地狱到精准拦截的架构升级
前端·javascript
web182854825121 小时前
nginx 部署前端vue项目
前端·vue.js·nginx
zy0101011 小时前
HTML标签
前端·css·html
程序员黄同学1 小时前
解释 Vue 中的虚拟 DOM,如何通过 Diff 算法最小化真实 DOM 更新次数?
开发语言·前端·javascript
蓝谷芮济2 小时前
二:前端发送POST请求,后端获取数据
前端
果粒chenl2 小时前
css+js提问
前端·javascript·css
memorycx2 小时前
Vue02
前端·javascript·vue.js