前端开发入门指南Day 14 :数据交互(从Ajax到Axios)和工具进阶(JSON、代理、正则表达式)

今天,我们将探索前端开发中最重要的几个实用工具和概念。这些工具就像是前端开发者的瑞士军刀,帮助我们更好地处理数据和实现各种功能。

一、HTTP请求:前后端通信的桥梁 🌉

为什么需要HTTP请求?

想象你在餐厅点餐:

  • 服务员(前端)需要把你的订单(请求)传递给厨房(后端)
  • 厨房完成后,需要通知服务员(响应)
  • 这个过程就是前后端通信的缩影

从Ajax到Axios的演进:

  1. 最初的Ajax时代
// 原始的XMLHttpRequest
const xhr = new XMLHttpRequest();
xhr.open('GET', 'api/data');
xhr.onreadystatechange = function() {if (xhr.readyState === 4 && xhr.status === 200) {const data = JSON.parse(xhr.responseText);console.log(data);}
};
xhr.send();

问题

  • 代码冗长
  • 不同浏览器可能有兼容性问题
  • 错误处理不够优雅
  1. 现代化的Axios
// 使用Axios
axios.get('api/data').then(response => console.log(response.data)).catch(error => console.log('出错了:', error));// 更优雅的async/await方式
async function getData() {try {const response = await axios.get('api/data');console.log(response.data);} catch (error) {console.log('出错了', error);}
}

二、JSON:数据交换的通用语言 📦

为什么需要JSON?

想象你和一个外国朋友交流:

  • 你们需要一种双方都能理解的语言
  • JSON就是前后端通信的"世界语"
// JavaScript对象
const user = {name: "张三",age: 25,hobbies: ["读书", "游泳"]
};// 转换为JSON字符串(发送给服务器)
const jsonString = JSON.stringify(user);
console.log(jsonString);
// 输出:{"name":"张三","age":25,"hobbies":["读书","游泳"]}// 从JSON字符串转回对象(接收服务器数据)
const parsedUser = JSON.parse(jsonString);

JSON的特点:

  1. 轻量级:数据格式简单
  2. 可读性强:人眼可以直接读懂
  3. 跨语言:几乎所有编程语言都支持

三、Proxy代理:数据监听者 👀

为什么需要Proxy?

想象你有一个保险箱:

  • 你想知道谁动过里面的东西
  • 你想控制谁能存取什么东西
// 创建一个代理对象
const user = {name: "张三",age: 25
};const userProxy = new Proxy(user, {// 获取属性时的处理get(target, property) {console.log(`有人查看了${property}属性`);return target[property];},// 设置属性时的处理set(target, property, value) {console.log(`有人修改了${property}属性为${value}`);target[property] = value;return true;}
});// 使用代理对象
console.log(userProxy.name);  // 会记录访问
userProxy.age = 26;          // 会记录修改

四、正则表达式:字符串处理的瑞士军刀 🔍

为什么需要正则表达式?

想象你在图书馆找书:

  • 你想找所有书名包含"JavaScript"的书
  • 你想找所有以"编程"结尾的书
  • 正则表达式就是这样的搜索模式

1. 表单验证必备  用户名验证

// 用户名:6-16位字母、数字或下划线,必须以字母开头
const usernamePattern = /^[a-zA-Z][a-zA-Z0-9_]{5,15}$/;// 解释:
// ^ 表示开头
// [a-zA-Z] 表示第一个字符必须是字母
// [a-zA-Z0-9_] 表示允许字母、数字和下划线
// {5,15} 表示除了第一个字符外,还需要5-15个字符(总共6-16位)
// $ 表示结尾// 使用示例
const testUsername = (username) => {if (!usernamePattern.test(username)) {return '用户名必须以字母开头,包含6-16位字母、数字或下划线';}return '验证通过';
};console.log(testUsername('john123'));     // 验证通过
console.log(testUsername('123john'));     // 错误:必须以字母开头

2. 密码强度验证

// 密码:至少8位,包含大小写字母、数字和特殊字符
const passwordPattern = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;// 解释:
// (?=.*[a-z]) 至少包含一个小写字母
// (?=.*[A-Z]) 至少包含一个大写字母
// (?=.*\d) 至少包含一个数字
// (?=.*[@$!%*?&]) 至少包含一个特殊字符
// [A-Za-z\d@$!%*?&]{8,} 所有允许的字符,至少8位// 使用示例
const checkPassword = "Test123!@";
console.log(passwordPattern.test(checkPassword));  // true

3. 手机号码验证(中国大陆)

// 手机号:支持最新号段
const phonePattern = /^1[3-9]\d{9}$/;// 更严格的版本(具体运营商号段)
const strictPhonePattern = /^1(3\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\d|9[0-35-9])\d{8}$/;// 使用示例
function validatePhone(phone) {return phonePattern.test(phone) ? '有效的手机号' : '无效的手机号';
}

4. 电子邮箱验证

// 邮箱验证:支持多级域名
const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;// 使用示例
const emails = ['test@example.com','test.name@company.co.uk','invalid.email@','@invalid.com'
];emails.forEach(email => {console.log(`${email}: ${emailPattern.test(email)}`);
});

实战示例:用户注册系统 🎯

class UserRegistration {constructor() {this.formData = {username: '',email: '',phone: ''};// 使用Proxy监控数据变化this.form = new Proxy(this.formData, {set(target, property, value) {console.log(`正在验证${property}`);target[property] = value;return true;}});}async register() {try {// 数据验证if (!this.validateForm()) {throw new Error('表单验证失败');}// 发送请求const response = await axios.post('/api/register', this.form);console.log('注册成功:', response.data);} catch (error) {console.error('注册失败:', error);}}validateForm() {const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;const phonePattern = /^1[3-9]\d{9}$/;return emailPattern.test(this.form.email) && phonePattern.test(this.form.phone);}
}

核心要点总结 💡

  1. HTTP请求
    • Ajax是基础,Axios是现代解决方案
    • 异步请求让页面交互更流畅
  2. JSON
    • 前后端数据交换的标准格式
    • 简单易用,人机都可读
    • 注意数据类型的转换
  3. Proxy
    • 优雅地监控数据变化
    • 可以用于表单验证

这些工具结合使用,能让我们的前端开发更加高效和稳健!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/62924.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三十一:HTTP多种重定向跳转方式的差异

在现代网站开发中,HTTP 重定向是一种常见的技术,用于将用户的请求从一个 URL 跳转到另一个 URL。重定向机制广泛应用于网站迁移、SEO 优化、以及内容管理系统中。不同的 HTTP 状态码代表不同的重定向方式,每种方式的行为和适用场景各有不同。本文将深入探讨 HTTP 重定向的几…

C++ 分治

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 1.分治法 2.二分搜索 函数传参——数组 3.棋盘覆盖 4.合并排序 5.快速排序 提示:以下是本篇文章正文内容,下面案例可供参考 1.分治法 基…

anaconda环境下安装第三方库

在 Anaconda 环境中使用 pip install 安装某些包时,可能会出现依赖或环境相关的问题。针对 fastdtw 的安装问题,你可以尝试以下解决方案: 1. 使用 Conda 安装 fastdtw Anaconda 的 conda 包管理器可以更好地处理依赖问题,尤其是…

用函数实现模块化程序设计(七)--数组作为函数参数(排序算法)

调用有参函数时,需要实参,实参可以是常量,变量,表达式,数组元素的作用与变量相当,凡是变量出现的地方都可用数组代替,数组元素可以用作函数实参,数组名可以作实参和形参,…

嵌入式Linux无窗口系统下搭建 Qt 开发环境

嵌入式Linux无窗口系统下搭建 Qt 开发环境 本文将介绍如何在树莓派的嵌入式 Linux 环境下,搭建 Qt 开发环境,实现无窗口系统模式(framebuffer)下的图形程序开发。 1. 安装 Qt 环境 接下来,安装核心 Qt 开发库以及与 …

基于STM32设计的智能宠物喂养系统(华为云IOT)_273

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成【4】设计意义【5】国内外研究现状【6】摘要1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发1.5 参考文献1.6 系统框架图1.7 系统原理图1.8 实物图1.9…

C++【PCL】利用矩阵对点云进行刚体变换

/** 功能&#xff1a; 点云刚体变换* 头文件&#xff1a; #include <pcl/common/transforms.h>* 功能函数&#xff1a; pcl::transformPointCloud(*pPointCloudIn, *pPointCloudOut, transform_1);*/#include <pcl/io/ply_io.h>#include <iostream>// pcl #i…

Java项目实战II基于微信小程序的文章管理系统的设计与实现 (开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 在信息爆炸的时代&#xff0c;内容创作与管理已成为众…

Conda 管理python开发环境

同步发布于我的网站 &#x1f680; 故事起因: 在公司使用Requests多任务并行开发时遇到了问题&#xff0c;使用 ProcessPoolExecutor 时不能正常发出网络请求&#xff0c;会卡在网络请求发不出去&#xff0c;但是善于用 ThreadPoolExecutor 时是可以的,纠结了很久&#xff0c;一…

【学习Go编程】

了解Go语言的基本概念&#xff1a; 学习Go的基本语法、数据类型、控制结构等。可以参考官方文档或基础教程来入门。 安装Go环境&#xff1a; 访问Go语言的官方网站&#xff0c;下载并安装适合你操作系统的Go编程环境。配置好环境变量&#xff0c;确保可以在命令行中使用go命令…

LLaMA-Factory 上手即用教程

LLaMA-Factory 是一个高效的大型语言模型微调工具&#xff0c;支持多种模型和训练方法&#xff0c;包括预训练、监督微调、强化学习等&#xff0c;同时提供量化技术和实验监控&#xff0c;旨在提高训练速度和模型性能。 官方开源地址&#xff1a;https://github.com/hiyouga/L…

PGSQL:联合唯一索引的创建和删除

创建联合唯一索引 假设有一个表 your_table&#xff0c;它有多个列&#xff0c;你想在其中的几列上创建一个联合唯一索引。以下是创建联合唯一索引的 SQL 语句&#xff1a; CREATE UNIQUE INDEX idx_unique_columns ON your_table(column1, column2, ...);注意&#xff1a; …

抓包之查看websocket内容

写在前面 本文看下websocket抓包相关内容。 1&#xff1a;正文 websocket基础环境搭建参考这篇文章。 启动后&#xff0c;先看chrome的network抓包&#xff0c;这里我们直接使用is:running来过滤出websocket的请求&#xff1a; 可以清晰的看到发送的内容以及响应的内容。在…

项目介绍和游戏搭建(拼图小游戏)

1. &#xff08;1&#xff09; import javax.swing.*;public class GameJFrame extends JFrame {//游戏主界面&#xff0c;游戏的所有逻辑public GameJFrame(){this.setSize(603,680);this.setVisible(true);//true是展示&#xff0c;flase是隐藏} } &#xff08;2&#xff…

Flask项目入门—会话技术Cookie和Session

Session和Cookie都是用于跟踪用户会话的技术、它们可以存储用户信息&#xff0c;以便在用户与网站进行交互时提供个性化的体验。然而&#xff0c;这两者在存储位置、使用方式、安全性等方面存在显著的差异。 工作原理/流程 Cookie 1、用户第一次访问时候服务器生成 Cookie&a…

【Maven】Nexus私服

6. Maven的私服 6.1 什么是私服 Maven 私服是一种特殊的远程仓库&#xff0c;它是架设在局域网内的仓库服务&#xff0c;用来代理位于外部的远程仓库&#xff08;中央仓库、其他远程公共仓库&#xff09;。一些无法从外部仓库下载到的构件&#xff0c;如项目组其他人员开发的…

前端Web性能分析工具扫盲

对于前端大型项目来说,很容易产生性能问题。对于这些性能问题,最常见的解决方式是使用性能分析工具进行分析,然后再进行针对性的解决。 一、Chrome DevTools 一般来说,前端的性能分析通常可以从时间和空间两个角度来进行: 时间:常见耗时,如页面加载耗时、渲染耗时、网…

一键生成后端服务,MemFire Cloud重新定义开发效率

作为开发者&#xff0c;特别是独立开发者和小团队成员&#xff0c;大家都知道开发的最大难题之一就是搭建后端服务。要让一个应用从零开始&#xff0c;除了前端的开发工作外&#xff0c;还需要考虑数据库、接口、认证、存储等等一系列繁琐的后台工作。而MemFire Cloud这款神器&…

HarmonyOS(60)性能优化之状态管理最佳实践

状态管理最佳实践 1、避免在循环中访问状态变量1.1 反例1.2 正例 2、避免不必要的状态变量的使用3、建议使用临时变量替换状态变量3.1 反例3.2 正例 4、参考资料 1、避免在循环中访问状态变量 在应用开发中&#xff0c;应避免在循环逻辑中频繁读取状态变量&#xff0c;而是应该…

Ubuntu 20.04中的权限管理:何时使用sudo以及何时可以避免

Ubuntu 20.04中的权限管理&#xff1a;何时使用sudo以及何时可以避免 在Ubuntu 20.04 LTS中&#xff0c;sudo命令的使用是区分普通用户权限和超级用户权限的关键。正确地理解何时需要使用sudo和何时可以直接使用命令是维护系统安全和操作有效性的重要部分。这里将详细解释何时…