导航
电话
咨询
地图
顶部
本文介绍如何通过前端 javascript 与后端 php 协同配合,在联系表单成功提交后立即隐藏“send”按钮、显示自定义成功消息,避免页面跳转,提升用户体验。
要实现“提交成功后隐藏按钮 + 显示感谢消息”,核心思路是:不依赖页面跳转(header() 重定向),而是通过 AJAX 异步提交表单,并在 JavaScript 中控制 UI 状态。你当前的代码仍采用传统表单提交(
修改你的 sendmail.php,确保它不执行重定向,而是统一输出 JSON,并在成功/失败时设置对应 HTTP 状态码:
false, 'message' => 'Method not allowed']); exit; } // 验证 & 过滤逻辑(保持你原有 test_input 和 $errors 处理) function test_input($data) { return htmlspecialchars(trim(stripslashes($data))); } $errors = []; if (empty($_POST['name']) || empty($_POST['email']) || empty($_POST['message'])) { $errors[] = "Please fill-in the form correctly"; } elseif (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { $errors[] = "Invalid e-mail address"; } if (!empty($errors)) { http_response_code(400); echo json_encode(['success' => false, 'message' => $errors[0]]); exit; } // 发送邮件 & 写日志(保留你原有逻辑) $name = test_input($_POST['name']); $email = test_input($_POST['email']); $message = test_input($_POST['message']); $to = "contact@example.com"; $subject = "example | You have a new message from " . $name; $body = "Name: $name\nEmail: $email\nMessage:\n$message"; $headers = "From: $email\r\n" . "Reply-To: $email\r\n"; // 记录日志(建议用 file_put_contents,注意权限) $logEntry = "$name == Email: $email == Message: $message" . PHP_EOL; file_put_contents('entries.log', $logEntry, FILE_APPEND | LOCK_EX); // 发送邮件(示例,实际请用 mail() 或 SMTP 库) if (mail($to, $subject, $body, $headers)) { http_response_code(200); echo json_encode(['success' => true, 'message' => 'Thank you for contacting us. We will be in touch with you soon.']); } else { http_response_code(500); echo json_encode(['success' => false, 'message' => 'Failed to send email. Please try again.']); } ?>
⚠️ 注意:mail() 函数在本地开发环境(如 XAMPP/MAMP)可能不可用,请测试或改用 PHPMailer 等可靠库。
保持你的 HTML 结构,但移除 onsubmit 冗余属性,添加 ID 便于操作:
添加以下 JavaScript(放在
# app # html # js # 前端 # json # php # javascript # java # ssl # css # cookie # ajax
相关栏目: 【 行业资讯 】 【 网络运营 】 【 GEO优化 】 【 营销推广 】 【 SEO优化 】 【 技术教程 】 【 代码知识 】 【 AI推广 】
相关推荐: 如何在JavaScript中动态拼接PHP的base_url与JS变量 win11如何清理传递优化文件 Win11为C盘瘦身删除更新缓存【技巧】 Windows10如何更改桌面背景_Win10个性化幻灯片放映设置 php485返回空数组怎么回事_php485数据接收为空排查指南【详解】 Win11怎么关闭自动维护 Win11禁用系统自动维护功能【优化】 Python异步网络编程_aiohttp说明【指导】 Win11如何隐藏桌面图标 Win11一键隐藏/显示桌面图标【指南】 php打包exe后无法写入文件_权限问题解决方法【教程】 C++如何使用std::async进行异步编程?(future用法) Go语言中正确反序列化多个同级XML元素为结构体切片的方法 如何在Golang中处理数据库事务错误_回滚和日志记录 Win11怎么开启游戏模式_Windows11优化游戏帧数设置指南 Python 中将 ISO 8601 时间戳转换为日期并计算日期差值的完整教程 Django密码修改后会话失效的解决方案 电脑的“网络和共享中心”去哪了_Windows 11新版网络设置指南【新手】 如何在Golang中处理二进制数据_Golang io与encoding/binary二进制操作方法 php中::能访问全局变量吗_全局作用域与类作用域区分【操作】 php中::能用于接口静态方法吗_接口静态方法调用规则【操作】 本地php环境打开php文件直接下载_浏览器解析php为下载的修复方法【解答】 Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言 如何用正则与预处理高效拦截带干扰符的恶意域名 Win11怎么设置快速访问主页_Windows11资源管理器文件夹选项 PHP怎么接收URL中的锚点参数_获取#后面参数值的技巧【详解】 php订单日志怎么在swoole写_php协程swoole写订单日志教程【教程】 Win11怎么打开旧版计算器_Win11恢复传统计算器应用【详解】 Win11任务栏怎么放到顶部_Win11修改任务栏位置方法【详细】 Python项目回滚策略_发布安全说明【指导】 Win11怎么关闭应用权限_Windows11相机麦克风隐私管理 如何在 ACF 中正确更新嵌套多层的 Group 字段子字段 C#怎么创建控制台应用 C# Console App项目创建方法 c++怎么使用std::filesystem遍历文件夹_c++ 递归查找文件与权限修改【技巧】 Python与Docker容器化部署实战_镜像构建与CI/CD流程 Win11怎么关闭自动调节亮度_Windows11禁用内容自适应亮度 零基础学会Python自动化办公_高效处理Excel与PDF文档 PythonPandas数据分析教程_数据清洗与处理技巧 如何使用Golang构建基础消息队列模拟_Golang消息发送与消费实现方法 Win10如何关闭安全中心所有通知 Win10禁用Windows Defender提醒【设置】 如何使用Golang实现跨域请求支持_Golang CORS配置与处理方法 Win11怎么查看显卡显存_查询Win11显卡详细参数方法【步骤】 使用类变量定义字符串常量时如何实现类型安全的 Literal 注解 Win11系统占用空间大怎么办 Win11深度瘦身清理指南【优化】 Python网络日志追踪_请求定位解析【教程】 php8.4xdebug无法调试怎么办_php8.4xdebug配置问题解决【解答】 Win10怎样卸载iTunes_Win10卸载iTunes步骤【步骤】 如何更改Windows资源管理器的默认启动位置?(快速访问/此电脑) Python与MongoDB NoSQL开发实战_文档模型与索引优化 Windows电脑如何截屏?(四种快捷方法) Linux如何申请SSL免费证书_Linux下Certbot安装与Nginx自动续期【指南】 php和redis连接超时怎么办_phpredis调试连接问题汇总【指南】 php怎么下载安装后设置默认字符集_utf8配置步骤【详解】
赣ICP备2024031479号