如何通过 AJAX 实现表单多次提交而不刷新页面

梦磊吖_7644

梦磊吖_7644

2026-08-16

775人浏览

原创

如何通过 AJAX 实现表单多次提交而不刷新页面

本文详解如何修复 ajax 表单提交后仅生效一次的问题,通过正确清空输入框值、避免重复绑定事件及规范 dom 操作,实现无需刷新即可连续多次向数据库插入数据。

本文详解如何修复 ajax 表单提交后仅生效一次的问题,通过正确清空输入框值、避免重复绑定事件及规范 dom 操作,实现无需刷新即可连续多次向数据库插入数据。

你遇到的“第二次点击保存无反应”问题,根本原因在于 JavaScript 清空表单字段的方式错误,以及潜在的 事件重复绑定风险。

在你的原始代码中,使用了 $('#Description').text('') 等语句来清空输入框——这是严重错误:.text() 作用于元素的文本内容,而 <input> 元素的用户输入值(value)应通过 .val() 方法操作。使用 .text('') 不会清空输入框,导致后续 serialize() 仍读取旧值(或空字符串),但更关键的是:若表单未真正清空,用户可能误以为已提交成功,实际却因字段为空/重复触发校验失败或 SQL 插入异常。

此外,将事件监听器写在 $(document).ready() 内虽常见,但若页面动态重载或脚本被多次引入,可能导致 #btn_save 被重复绑定多个 click 事件,造成逻辑混乱(例如一次点击触发多次请求)。

✅ 正确做法如下:

1. 使用 .val('') 清空输入框值

success: function(response) {
    $('#result').text(response);
    // ✅ 正确:清空 input 的 value 属性
    $('#Description').val('');
    $('#Unitys').val('');
    $('#quantitys').val('');
    $('#Text1s').val('');
    $('#PurchaseQty').val('');
    $('#Amount1').val('');
}

2. 确保事件只绑定一次(推荐解耦写法)

避免嵌套在 $(document).ready() 中重复执行,推荐使用一次性委托或直接绑定:

AJAX技术—无刷新获取数据相关课件
AJAX技术—无刷新获取数据相关课件

AJAX技术—无刷新获取数据相关课件

下载
<!-- 移除内联 onclick -->
<input class="button is-info is-large" id="btn_save" type="button" value="Save">
// 推荐:页面加载后仅绑定一次
$(function() {
    $('#btn_save').off('click').on('click', function(e) {
        e.preventDefault(); // 防止意外默认行为
        const data = $('#myform').serialize() + '&btn_save=btn_save';
        $.ajax({
            url: 'insert.php',
            type: 'POST', // ⚠️ 强烈建议改用 POST(见下方说明)
            data: data,
            success: function(response) {
                $('#result').text(response);
                // 清空所有输入框
                $('#myform')[0].reset(); // 更简洁:重置整个表单
            },
            error: function(xhr, status, err) {
                $('#result').text('Error: ' + status);
            }
        });
    });
});

3. 关键改进:将请求方法从 GET 改为 POST

你当前使用 type: 'Get' 提交敏感操作(数据库写入),这违反 REST 规范且存在严重隐患:

  • GET 请求参数暴露在 URL 中,易被缓存、记录或截获;
  • URL 长度限制可能导致大数据截断;
  • 浏览器可能对相同 URL 的 GET 请求进行缓存,导致第二次请求直接返回缓存结果(看似“没反应”)。

✅ 修改为 POST,并同步更新 PHP 端:

// JS 端
type: 'POST',
// insert.php 中改为
if (isset($_POST['btn_save'])) {
    $DescriptionZ = mysqli_real_escape_string($con, $_POST['Description']);
    $UnityZ = mysqli_real_escape_string($con, $_POST['Unitys']);
    // ... 其他字段同理(全部改用 $_POST)

    $sql = "INSERT INTO `orders` (`id`, `OrderID`, `Description`, `Unit`, `Quantity`, `Cost`, `Purchasing Qty`, `Amount`) 
            VALUES (NULL, '[555]', ?, ?, ?, ?, ?, ?)";

    // ✅ 强烈建议升级为预处理语句(防注入+更安全)
    $stmt = $con->prepare($sql);
    $stmt->bind_param("ssssss", $DescriptionZ, $UnityZ, $quantityZ, $TextZ, $PurchaseQtyZ, $AmountZ);
    $result = $stmt->execute();

    if ($result) {
        echo "Data Saved Successfully";
    } else {
        echo "Failed to save data: " . $stmt->error;
    }
}

4. 额外优化建议

  • 移除冗余 HTML 属性:<form></form> 的 action 和 method 在纯 AJAX 场景下无需设置,可简化为 <form id="myform"></form>;
  • 添加加载状态反馈:点击按钮后禁用按钮并显示 loading,防止重复点击;
  • 服务端验证不可省略:前端清空 ≠ 数据有效,PHP 必须校验必填字段、类型、长度等。

通过以上修正,你的表单即可稳定支持无限次无刷新提交,同时大幅提升安全性与健壮性。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

ajax

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

2320

4

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

340

5

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.15

2153

5

ajax网站有哪些
ajax网站有哪些

使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.09.24

1141

6

ThinkPHP表单验证与数据安全处理实战
ThinkPHP表单验证与数据安全处理实战

本专题聚焦 ThinkPHP 在表单处理中的验证与安全机制,系统讲解验证器使用、自定义规则、场景验证以及错误提示处理。内容涵盖 XSS 防护、SQL 注入防御、数据过滤与输入校验等关键安全措施。通过实际案例,帮助开发者构建安全可靠的数据处理流程。

2026.03.30

181

20

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

20

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

0

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

0

15

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

2026.09.22

0

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
jQuery官方API文档
jQuery官方API文档

共0课时 | 0人学习

Symfony教程(入门篇+基础篇)
Symfony教程(入门篇+基础篇)

共18课时 | 1.8万人学习