导航
电话
咨询
地图
顶部
本文介绍如何通过前端 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推广 】
相关推荐: php打包exe后无法读取环境变量_变量配置方法【教程】 Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件 Win10怎样清理C盘爱奇艺缓存_Win10清理爱奇艺缓存步骤【步骤】 Go语言中slice追加操作的底层共享机制解析 Win11无法拖拽文件到任务栏怎么办_Win11开启拖放功能修复【方法】 如何在Golang中解压文件_Golang compress/gzip解压操作方法 C++中的协变与逆变是什么?C++函数指针与返回类型详解【类型系统】 Win10怎样卸载TeamViewer_Win10卸载TeamViewer步骤【教程】 Windows服务无法启动错误1067是什么_进程意外终止的解决方法 php嵌入式多设备通信怎么实现_php同时管理多个串口设备【操作】 如何从 Go 的 map[string]interface{} 中安全获取值 如何使用Golang构建简易投票统计功能_Golang投票数据汇总与展示示例 Win11用户账户控制怎么关_Win11关闭UAC弹窗提示【设置】 Python大文件处理策略_内存优化说明【指导】 Mac如何开启夜览模式_Mac护眼模式设置与定时 php中$this和::能混用吗_对象与静态作用域冲突解决【方法】 Win11怎么自动隐藏任务栏_Win11全屏显示设置【美化】 Win10系统更新错误0x80240034怎么办 Win10更新错误解决法【方法】 Win11如何连接Xbox手柄 Win11蓝牙连接游戏手柄教程【步骤】 Win11怎么设置闹钟_Windows 11时钟应用闹钟设置指南【详解】 如何使用Golang recover捕获panic_防止程序崩溃并处理异常 Windows10如何更改计算机工作组_Win10系统属性修改Workgroup 如何在Golang中理解指针比较_Golang地址比较与相等判断 mac本地php环境如何开启curl_curl扩展启用与测试步骤详解【汇总】 PHP接收参数值为空怎么办_判断和处理空参数方法说明【说明】 Win11怎么设置默认终端应用_Windows11开发者选项终端 Win11怎么关闭右下角弹窗_Win11拦截系统通知广告【设置】 Win11怎么关闭防火墙通知_屏蔽Win11安全中心安全警告弹窗【技巧】 Win11如何设置鼠标灵敏度_Win11鼠标灵敏度调整教程【攻略】 Win10系统字体模糊怎么办_Windows10高级缩放设置修复 VSC怎么在PHP中调试MySQL_数据库交互排查技巧【教程】 Linux如何申请SSL免费证书_Linux下Certbot安装与Nginx自动续期【指南】 php下载安装包太大怎么下载_分卷压缩下载方法【教程】 Python对象生命周期管理_创建销毁解析【教程】 Win11怎么更改输入法顺序_Win11调整语言首选位置【设置】 c++输入输出流 c++ cin与cout格式化输出【方法】 如何在Golang中修改数组元素_通过指针实现原地更新 Python函数接口稳定性_版本演进解析【指导】 如何使用Golang实现路由分组管理_Golang路由分组与权限控制方法 Linux怎么设置磁盘配额_Linux系统Quota安装与用户空间限制【教程】 如何在Golang中使用闭包_封装变量与函数作用域 Python 模块的 __name__ 属性如何由导入方式决定? Win10怎么关闭自动更新错误重启 Win10策略禁止失败补丁强制重启【防护】 Windows执行文件被SmartScreen拦截原因_安全提示与绕过方式 如何在 IIS 上为 ASP.NET 6 应用排除特定目录并交由 PHP 处理 Python文件操作优化_大文件与流处理解析【教程】 phpstudy本地环境mysql忘记密码_重置mysqlroot密码操作流程【解答】 php中::能用于接口静态方法吗_接口静态方法调用规则【操作】 Win11如何设置省电模式 Win11开启电池节电功能【优化】 Linux如何使用grep搜索文件内容_Linux下正则表达式匹配与查找技巧【指南】
赣ICP备2024031479号