使用Sweet Alert实现Toast消息异常问题及需求咨询
Sweet Alert Toast 异常问题解决(仅表单提交后跳转显示)
问题根源
- session变量未及时清除:原代码依赖AJAX异步清除session,存在延迟,若用户在Toast消失前刷新页面,session变量仍保留,导致非表单跳转时错误触发Toast;
- 代码分支遗漏:page1.php中,新增机构后插入学术数据的成功分支未设置
$_SESSION['redirect_token'],导致该场景下无法触发Toast; - session初始化缺失:page2.php未显式调用
session_start(),可能导致session读取异常,引发Toast显示不稳定; - 清除时机不合理:AJAX清除逻辑无法保证session变量在页面首次加载后立即失效,导致重复触发。
解决方案
- 统一设置跳转标识:在page1.php所有表单提交成功的分支中,都添加
redirect_token的设置; - 显式初始化session:在page2.php开头添加
session_start(),确保session可正常读取; - 同步清除session变量:在输出Toast脚本前,先读取session内容,然后立即清除相关变量,确保Toast仅触发一次;
- 移除异步清除逻辑:取消AJAX清除session的代码,避免异步操作带来的不确定性。
修改后的代码示例
page1.php 关键修复部分
// ... 原有代码 ... if ($execute3) { $_SESSION['success_message'] = "Tambah Data Kelayakan Akademik dan Ikhtisas"; $_SESSION['redirect_token'] = uniqid(); // 补充该行,与第一个成功分支保持一致 header('Location: .././page2.php'); } // ... 原有代码 ...
page2.php 完整修改代码
<?php session_start(); $showToast = false; $toastContent = ''; // 校验并读取session数据 if (isset($_SESSION['success_message']) && isset($_SESSION['redirect_token'])) { $showToast = true; $toastContent = $_SESSION['success_message']; // 立即清除session,防止重复触发 unset($_SESSION['success_message'], $_SESSION['redirect_token']); } ?> <!-- Toast 显示逻辑 --> <?php if ($showToast): ?> <script> Swal.fire({ position: 'top-end', toast: true, icon: 'success', title: '<?php echo $toastContent; ?>', text: 'Berjaya!', showConfirmButton: false, timer: 3000, timerProgressBar: true, backgroundColor: '#28a745', titleColor: '#fff', }); </script> <?php endif; ?>
注意事项
session_start()必须放在page2.php的最开头,不能有任何输出(包括空格、HTML标签)在它之前,否则会触发"headers already sent"错误;- 清除session变量的操作必须在输出Toast脚本之前完成,确保页面刷新后不会重复显示;
- 所有表单提交成功的分支都要设置
redirect_token,避免部分提交场景下Toast不生效。
内容的提问来源于stack exchange,提问作者Efannnnnn
相关产品推荐
相关产品推荐

