Ajax CRUD场景下Toastr弹窗弹出但无消息内容显示问题
问题根因
JavaScript是大小写敏感语言,你全局调用和配置时使用的是全小写的toastr实例,但Ajax提交成功回调中错误使用了首字母大写的Toastr调用方法,和实际加载的toastr实例不匹配,导致弹窗容器被触发渲染,但传入的提示文本参数无法被正确读取,最终出现空弹窗的现象。
这也和你描述的「普通session触发的成功提示可正常展示」现象完全吻合——session相关的提示调用全部使用了正确的小写toastr写法。
修复方案
按以下步骤调整代码即可解决问题:
- 修正Ajax回调中的调用拼写,把大写开头的调用改为全小写,和全局实例保持一致:
// 原错误写法 Toastr.success(response.message); // 修正为 toastr.success(response.message);
- 优化全局toastr配置逻辑,公共配置不需要每次调用提示都重复声明,提前到最外层只初始化一次即可,调整后的母版页全局脚本参考:
<script> // 全局统一配置,仅初始化一次 toastr.options = { "closeButton": true, "progressBar": true } @if (Session::has('success')) toastr.success("{{ session('success') }}"); @endif @if (Session::has('error')) toastr.error("{{ session('error') }}"); @endif @if (Session::has('info')) toastr.info("{{ session('info') }}"); @endif @if (Session::has('warning')) toastr.warning("{{ session('warning') }}"); @endif </script>
- 确认脚本加载顺序:jQuery脚本需要放在toastr脚本之前加载,避免后续Ajax调用、toastr调用出现依赖异常。
- 验证修复:修改完成后清空浏览器缓存,提交表单测试即可正常展示带文本内容的提示弹窗;如果仍有异常,可打开浏览器控制台执行
console.log(toastr)确认实例正常加载,排查是否有其他脚本重名覆盖问题。
内容的提问来源于stack exchange,提问作者Utsab Dey
相关产品推荐
相关产品推荐

