前端原生API调用方法

前端API调用与后端API搭建及页面跳转

目录

一、前端API调用

1. XMLHttpRequest (XHR)

2. Fetch API

二、建立后端供前端调用API

三、调用API

xhr调用的

fetch调用的

控制台

四、页面跳转(重定向)


一、前端API调用

1. XMLHttpRequest (XHR)

XMLHttpRequest 是一个较老但仍然广泛使用的 API,用于发送异步 HTTP 请求。它在现代浏览器中得到了很好的支持,并且可以处理各种类型的请求(GET、POST 等)。

示例代码

function xhrApi() {
    const xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://localhost:11451/hello', true);
    xhr.onload = function () {
        if (xhr.status === 200) {
            console.log(xhr.responseText);
        } else {
            console.error('Request failed.  Returned status of ' + xhr.status);
        }
    };
    xhr.send();
}

2. Fetch API

fetch 是现代浏览器内置的一个基于 Promise 的 HTTP 请求库,用于发送网络请求。它提供了更简洁和现代的 API,并且支持更多的功能,如自动解析 JSON 数据等。

示例代码

function fetchApi() {
    fetch('http://localhost:11451/hello')
        .then(response => {
            if (!response.ok) {
                throw new Error('Network response was not ok');
            }
            return response.text();
        })
        .then(data => {
            console.log(data);
        })
        .catch(error => {
            console.error('There was a problem with the fetch operation:', error);
        });
}

二、建立后端供前端调用API

建立一个后端项目先

然后我们修改一下配置文件

server:
  port: 11451

然后写一下controller

package com.xingzai.apitest.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author 无敌の星仔<br>
 * 2024/10/13 下午4:33
 */
@RestController
@Slf4j
public class ApiController {
    @CrossOrigin("*")
    @GetMapping("/hello")
    public String hello() {
        log.info("被调用了");
        return "Hello world";
    }
}

主启动类

package com.xingzai.apitest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ApiTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(ApiTestApplication.class, args);
    }

}

然后我们启动。

三、调用API

xhr调用的

fetch调用的

几乎就没有区别

控制台

我们看看控制台

所以我们原生的调用就有这么两种办法,而且大家在平时用F12的时候也没少看到,我们网络的筛选方案里就有个Fetch/XHR

所以我们开发的时候也是注意是给新浏览器用的还是给全部浏览器用的

四、页面跳转(重定向)

这个其实很简单,我们想要重定向直接修改window.location.href这个属性就可以了

<think>我们正在讨论前端调用API的不同方法和技术。根据引用内容,我们可以总结出几种常见的前端API调用方式: 1. 使用Vue封装API调用组件(引用[1]) 2. 使用Deepseek API调用方式,涉及流式和非流式(引用[2]) 3. 使用原生fetch API(引用[3]) 此外,我们还可以补充其他常见方式,如使用Axios、jQuery的ajax等。 因此,我们可以将前端API调用方式分为: 1. 原生方法:fetch API、XMLHttpRequest 2. 第三方库:Axios、jQuery.ajax等 3. 框架封装:如Vue中封装API调用(通常基于fetch或Axios) 下面我们将详细展开这些方法,并给出示例代码。</think>### 前端开发中常用的 API 调用方式 前端调用 API 主要有以下几种技术方案,根据项目需求和技术栈可选择不同实现方式: #### 1. **原生 Fetch API**(现代浏览器内置) ```javascript // 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/submit', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ key: 'value' }) }); ``` **特点**: - 无需第三方库 - 支持 Promise 异步处理 - 可配置请求头、跨域模式等 - 流式响应处理(引用[2]) #### 2. **Axios 库**(最流行的 HTTP 客户端) ```javascript import axios from 'axios'; // GET 请求 axios.get('/user', { params: { ID: 123 } }) .then(response => console.log(response.data)) // POST 请求 axios.post('/user', { name: 'John' }, { headers: { 'X-Custom-Header': 'value' } }); ``` **特点**: - 自动转换 JSON 数据 - 请求/响应拦截器 - 客户端防 CSRF 保护 - 请求取消能力 - 更完善的错误处理 #### 3. **框架封装方案**(如 Vue/React) ```javascript // Vue 示例 - 封装 API 模块(引用[1]) // api.js import axios from 'axios'; export default { getUser(id) { return axios.get(`/users/${id}`); }, createUser(data) { return axios.post('/users', data); } } // 组件调用 import api from './api'; api.getUser(1).then(...); ``` **特点**: - 统一管理 API 端点 - 便于添加全局拦截逻辑(如 token 注入) - 提高代码复用性 - 支持流式响应(引用[2]) #### 4. **WebSocket 实时通信** ```javascript const socket = new WebSocket('wss://api.example.com/ws'); socket.onopen = () => { socket.send(JSON.stringify({ action: 'subscribe' })); }; socket.onmessage = (event) => { console.log('实时数据:', JSON.parse(event.data)); }; ``` **适用场景**: - 实时聊天应用 - 金融行情推送 - 多人协作编辑 #### 5. **GraphQL 查询** ```javascript // 使用 Apollo Client import { gql, useQuery } from '@apollo/client'; const GET_DATA = gql` query GetData($id: ID!) { user(id: $id) { name email } } `; function Component() { const { data } = useQuery(GET_DATA, { variables: { id: 1 } }); return <div>{data?.user.name}</div>; } ``` **优势**: - 精确获取所需数据 - 减少网络请求次数 - 强类型 schema 校验 ### 关键选择因素 | 方式 | 学习曲线 | 浏览器支持 | 功能扩展性 | 适用场景 | |---------------|----------|------------|------------|------------------------| | Fetch API | ★★☆ | IE11+ | ★★☆ | 简单请求、现代项目 | | Axios | ★★★ | 全兼容 | ★★★ | 企业级应用 | | 框架封装 | ★★★★ | 依赖框架 | ★★★★ | 中大型工程化项目 | | WebSocket | ★★★☆ | IE10+ | ★★★☆ | 实时双向通信 | | GraphQL | ★★★★ | 全兼容 | ★★★★ | 复杂数据关系场景 | > **最佳实践建议**:中小项目可直接使用 Fetch 或 Axios;大型工程建议采用框架封装方案统一管理 API 调用,结合拦截器实现以下功能: > 1. 自动添加认证令牌 > 2. 统一错误处理 > 3. 请求重试机制 > 4. 响应数据格式化(引用[1])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值