程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • Ajax

    • 初识Ajax
    • jQuery 的 AJAX 请求
    • 原生 XHR请求
    • 文件上传
    • Ajax 提交表单数据
      • 1.<form> 标签的属性
        • 1.1 target
        • 1.2 enctype
      • 2. 表单的同步提交及缺点
        • 2.1 什么是表单的同步提交
        • 2.2 表单同步提交的缺点
        • 2.3 解决方案
      • 3. 通过 Ajax 提交表单数据
        • 3.1 监听表单提交事件
        • 3.2 阻止表单默认提交行为
        • 3.3 快速获取表单中的数据
        • 使用 serialize() 函数
    • 跨域与JSONP
  • Ajax
  • Ajax
scholar
2024-07-24
目录

Ajax 提交表单数据

# Ajax 提交表单数据

在 Web 开发中,表单是用户与应用程序交互的重要方式。本文将详细介绍 <form> 标签的属性、表单的同步提交及其缺点、以及如何通过 Ajax 提交表单数据。

# 1.<form> 标签的属性

<form> 标签用于创建 HTML 表单。以下是一些常用的属性及其说明:

image-20240724191319042

# 1.1 target

target 属性指定了当表单被提交时,响应应该在何处显示。常见的值有:

  • _self: 默认值,响应在同一框架中显示。
  • _blank: 在新窗口或标签页中显示响应。
  • _parent: 在父框架中显示响应。
  • _top: 在整个窗口中显示响应,通常用于框架中。

示例:

<!-- 表单响应在新标签页中打开 -->
<form action="submit.php" target="_blank">
    <input type="text" name="name" />
    <button type="submit">提交</button>
</form>
1
2
3
4
5

# 1.2 enctype

enctype 属性用于指定表单数据的编码方式。当涉及文件上传时,必须将 enctype 设置为 multipart/form-data。对于其他类型的表单提交,通常使用默认的 application/x-www-form-urlencoded。

示例:

<!-- 不涉及文件上传的表单 -->
<form action="submit.php" method="post" enctype="application/x-www-form-urlencoded">
    <input type="text" name="name" />
    <button type="submit">提交</button>
</form>

<!-- 涉及文件上传的表单 -->
<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <button type="submit">上传文件</button>
</form>
1
2
3
4
5
6
7
8
9
10
11

说明:

  • application/x-www-form-urlencoded: 默认编码类型,适用于普通表单数据。
  • multipart/form-data: 用于文件上传,允许将文件和表单数据一起发送。

# 2. 表单的同步提交及缺点

# 2.1 什么是表单的同步提交

表单的同步提交是指用户点击提交按钮时,浏览器会将表单数据提交到服务器,并跳转到 action 属性指定的 URL 地址。此操作会刷新页面,并可能丢失当前页面的状态和数据。

示例:

<form action="submit.php" method="post">
    <input type="text" name="username" />
    <button type="submit">提交</button>
</form>
1
2
3
4

# 2.2 表单同步提交的缺点

  1. 页面跳转:表单提交会导致页面刷新或跳转,用户在提交数据后可能看到新页面。
  2. 状态丢失:页面刷新会导致之前的状态(如用户输入的数据)丢失。

# 2.3 解决方案

为了避免表单提交导致的页面跳转和状态丢失,可以使用 Ajax 进行异步提交。这样,表单只负责收集数据,而 Ajax 负责将数据提交到服务器,页面不会被刷新或跳转。

# 3. 通过 Ajax 提交表单数据

# 3.1 监听表单提交事件

可以使用 jQuery 监听表单的提交事件,通常有两种方式:

方式 1:

// 使用 submit 事件监听表单提交
$('#form1').submit(function(e) {
    alert('监听到了表单的提交事件');
});
1
2
3
4

方式 2:

// 使用 on() 方法监听表单提交
$('#form1').on('submit', function(e) {
    alert('监听到了表单的提交事件');
});
1
2
3
4

# 3.2 阻止表单默认提交行为

为了防止表单在提交时刷新页面或跳转,可以调用事件对象的 preventDefault() 方法。

示例:

$('#form1').submit(function(e) {
    // 阻止表单的默认提交行为
    e.preventDefault();
    // 进行 Ajax 提交
    // 例如,获取表单数据并发送到服务器
});
1
2
3
4
5
6

# 3.3 快速获取表单中的数据

# 使用 serialize() 函数

serialize() 函数可以快速获取表单中所有数据,并将其编码为 URL 查询字符串。

示例:

<form id="form1">
    <input type="text" name="username" />
    <input type="password" name="password" />
    <button type="submit">提交</button>
</form>
1
2
3
4
5

JavaScript:

// 使用 serialize() 获取表单数据
var serializedData = $('#form1').serialize();
// 结果示例:username=用户名的值&password=密码的值
console.log(serializedData);
1
2
3
4

说明:

  • serialize() 函数将表单数据序列化为一个字符串,以 & 分隔键值对,适用于 GET 请求。
  • 确保每个表单元素都有 name 属性,因为 serialize() 函数依赖于 name 属性来识别数据。
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
文件上传
跨域与JSONP

← 文件上传 跨域与JSONP→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式