使用 Axios ——个人信息修改与提示框实现

目录

详细介绍:个人信息设置与修改页面实现

1. HTML 结构

2. CSS 样式

3. JavaScript 核心逻辑

a. 信息渲染与表单提交

b. 头像上传与预览

4. 功能详解

5. 总结

提示:


这段代码展示了如何创建一个简单的个人信息设置页面,包含用户个人资料编辑、头像上传和信息提交功能。通过使用HTML、CSS、JavaScript与Axios库,用户能够在页面上修改自己的基本信息,并通过发送HTTP请求更新后端数据。

1. HTML 结构

首先是HTML部分,用于构建用户界面和基本表单。包括了用户信息输入的字段、头像预览、文件上传控件以及导航栏。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
  <link rel="stylesheet" href="./css/index.css">
  <title>个人信息设置</title>
</head>
<body>
  <div class="toast my-toast" data-bs-delay="2000">
    <div class="toast-body">
      <div class="alert alert-success info-box">
        操作成功
      </div>
    </div>
  </div>
  
  <div class="container">
    <ul class="my-nav">
      <li class="active">基本设置</li>
      <li>安全设置</li>
      <li>账号绑定</li>
      <li>新消息通知</li>
    </ul>
    
    <div class="content">
      <div class="info-wrap">
        <h3 class="title">基本设置</h3>
        <form class="user-form" action="javascript:;">
          <div class="form-item">
            <label for="email">邮箱</label>
            <input id="email" name="email" class="email" type="text" placeholder="请输入邮箱" autocomplete="off">
          </div>
          <div class="form-item">
            <label for="nickname">昵称</label>
            <input id="nickname" name="nickname" class="nickname" type="text" placeholder="请输入昵称" autocomplete="off">
          </div>
          <div class="form-item">
            <label>性别</label>
            <label class="male-label"><input type="radio" name="gender" class="gender" value="0">男</label>
            <label class="male-label"><input type="radio" name="gender" class="gender" value="1">女</label>
          </div>
          <div class="form-item">
            <label for="desc">个人简介</label>
            <textarea id="desc" name="desc" class="desc" placeholder="请输入个人简介" cols="20" rows="10" autocomplete="off"></textarea>
          </div>
          <button class="submit">提交</button>
        </form>
      </div>
      <div class="avatar-box">
        <h4 class="avatar-title">头像</h4>
        <img class="prew" src="./img/头像.png" alt="">
        <label for="upload">更换头像</label>
        <input id="upload" type="file" class="upload">
      </div>
    </div>
  </div>
  
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.min.js"></script>
  <script src="./lib/form-serialize.js"></script>
  <script src="./js/index.js"></script>
</body>
</html>
2. CSS 样式

在这段代码中,CSS样式文件./css/index.css控制页面布局、样式和视觉效果,确保页面的美观和响应式设计。你可以根据需要进一步修改该样式。

3. JavaScript 核心逻辑
a. 信息渲染与表单提交

页面加载时,会根据用户数据渲染表单字段,允许用户进行编辑。通过Axios请求后台接口,并将修改的数据通过PUT请求提交到服务器。

document.querySelector(".submit").addEventListener("click", () => {
  const userFrom = document.querySelector(".user-form");
  const userObj = serialize(userFrom, { hash: true, empty: true });

  userObj.gender = +userObj.gender; // 确保性别数据是数字
  userObj.creator = "小宁"; // 设置请求的创建者信息

  axios({
    url: "http://hmajax.itheima.net/api/settings", // 后台接口地址
    method: "put",
    data: userObj, // 提交的表单数据
  }).then(result => {
    console.log(result);

    // 显示操作成功的提示框
    const toastDom = document.querySelector(".my-toast");
    const toast = new bootstrap.Toast(toastDom);
    toast.show();
  });
});
b. 头像上传与预览

用户可以通过文件输入框上传头像,头像将上传到后台并且实时更新页面上的预览图。这里使用了FormData来处理文件上传。

document.querySelector('.upload').addEventListener('change', e => {
  const fd = new FormData();
  fd.append('avatar', e.target.files[0]); // 获取用户选择的头像文件
  fd.append('creator', "小宁"); // 创建者信息

  axios({
    url: 'http://hmajax.itheima.net/api/avatar', // 上传头像的API
    method: 'put',
    data: fd, // 上传数据
  }).then(result => {
    console.log(result);
    
    // 获取返回的头像地址并更新页面上的预览
    const imgUrl = result.data.data.avatar;
    document.querySelector('.prew').src = imgUrl; 
  });
});
4. 功能详解
  • 表单字段:页面有邮箱、昵称、性别、个人简介等字段。用户可以编辑这些信息并点击提交按钮提交表单。
  • 头像上传:用户可以选择上传一个头像,页面将显示上传的头像并通过后台接口更新。
  • 信息更新提示:当用户提交表单或者更新头像后,页面会显示一个成功的提示框(Toast),确保用户知道操作成功。
  • 数据提交:所有表单数据通过Axios发送到指定的后台接口,更新用户的个人信息。
5. 总结

本代码实现了一个简易的个人信息管理页面,包含了表单数据的编辑、头像上传、数据提交、用户提示等功能。你可以将这些代码复制到自己的项目中,并根据需求修改后端接口或者样式。这种类型的页面适用于许多需要个人信息管理的应用,如社交平台、个人网站等。

提示:

  • HTML部分:负责页面结构,包括表单字段、头像上传、按钮等。
  • CSS部分:控制页面布局和样式(如字体、间距、按钮样式等),位于./css/index.css
  • JavaScript部分:实现了表单数据的序列化、头像上传和成功提示框的显示,主要使用了Axios库来进行数据的发送和接收。

希望你能通过这段代码更好地理解如何处理用户信息和头像上传等常见功能。

### 如何在 Vue 中使用 Axios 编写前端接口 #### 创建 Axios 实例并设置默认配置 为了更好地管理 HTTP 请求,在 Vue 项目中通常会创建一个独立的 Axios 实例,并为其设定一些全局性的默认参数。这有助于简化后续代码逻辑,提高可读性和维护性。 ```javascript // src/utils/axios.js import axios from &#39;axios&#39;; const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, // API 的 base_url timeout: 5000 // 请求超时时间 }); export default service; ``` 此部分定义了一个名为 `service` 的 Axios 实例[^1],其中包含了基本 URL 和请求超时时长两个重要属性。 #### 添加请求响应拦截器 利用 Axios 提供的强大功能——拦截器机制,可以实现对每次发出的请求以及接收到的服务端回复统一处理,比如身份验证令牌附加、错误提示等操作。 ```javascript // 继续编辑 src/utils/axios.js 文件 // request interceptor service.interceptors.request.use( config => { // 在发送请求前一些事情 const token = localStorage.getItem(&#39;token&#39;); if (token) { config.headers[&#39;Authorization&#39;] = `Bearer ${token}`; } return config; }, error => { // 对请求错误些什么 Promise.reject(error); }); // response interceptor service.interceptors.response.use( response => response.data, error => { // 对响应错误些事 Message.error(error.message); // 使用 Element UI 或其他UI库显示消息框 return Promise.reject(error); }); ``` 上述代码展示了如何向 Axios 实例添加自定义行为来增强其能力。 #### 定义公共API函数封装常用HTTP方法 为了让业务层更加专注于数据交互本身而非底层细节,建议将常用的 GET / POST 方法进一步抽象成易于使用的工具类或服务模块。 ```javascript // 新建文件 src/api/user.js import request from &#39;@/utils/request&#39;; export function login(data){ return request({ url:&#39;/auth/login&#39;, method:&#39;post&#39;, data:data }) } export function getInfo(token){ return request({ url:&#39;/user/info&#39;, method:&#39;get&#39; }) } ``` 这里通过导入前面创建好的 Axios 实例作为依赖注入到具体的 API 函数内部,从而实现了更高层次上的解耦合设计模式。 #### 注册为全局变量以便于各处调用 最后一步就是让整个应用程序都能轻松访问这些精心准备的功能了! ```javascript // 修改 main.js 文件 import Vue from &#39;vue&#39;; import App from &#39;./App.vue&#39;; import router from &#39;./router&#39;; import store from &#39;./store&#39;; import axios from &#39;./utils/axios&#39;; Vue.config.productionTip = false; Vue.prototype.$http = axios; new Vue({ router, store, render: h => h(App), }).$mount(&#39;#app&#39;) ``` 现在任何地方都可以直接通过 this.$http 来发起网络请求而无需重复引入相同的包。 #### 调用示例 当一切就绪后就可以按照如下方式去实际运用它们啦: ```javascript methods:{ async handleLogin(){ try{ let res=await this.$http.post(&#39;/login&#39;,{username:"admin",password:"123"}) console.log(res) }catch(e){ console.error(e) } } } ``` 以上就是在 Vue 应用程序里集成 Axios 并构建 RESTful 接口的最佳实践之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值