Laravel重定向后Bootstrap弹窗无法显示问题排查
解决Laravel重定向后Bootstrap弹窗不显示且报错"Uncaught ReferenceError: $ is not defined"的问题
看起来你的问题核心是jQuery没有被正确加载,导致Bootstrap的modal无法通过$调用,同时还存在一个变量传递的小问题。我来一步步帮你修复:
1. 修复$ is not defined错误(核心问题)
控制台的这个报错说明页面在执行$(document).ready(...)时,jQuery还没完成加载。Bootstrap所有JS组件(包括modal)都依赖jQuery,必须严格保证加载顺序:
- 先加载jQuery
- 再加载Bootstrap JavaScript
- 最后执行自定义脚本(比如触发modal的代码)
检查你的includes.script文件,确保引入顺序是这样的:
<!-- 优先引入jQuery --> <script src="https://code.jquery.com/jquery-3.6.4.min.js"></script> <!-- 再引入Bootstrap JS(建议用bundle版本,包含Popper.js) --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js"></script> <!-- 其他自定义脚本放在最后 -->
另外,你触发modal的脚本目前放在视图内容区,可能早于jQuery加载完成。可以改成原生JS写法(不依赖jQuery),避免加载顺序问题:
<!-- Show modal Req submited--> @if(!empty(Session::get('req_submit'))) <script> document.addEventListener('DOMContentLoaded', function() { // 用Bootstrap原生API触发弹窗 const reqModal = new bootstrap.Modal(document.getElementById('reqModal')); reqModal.show(); }); </script> @endif
2. 修复Modal里的$token变量错误
你的控制器把token存在Session的req_submit键中,但modal的input里用了{{$token}}——这个变量在重定向后的视图里是不存在的(重定向后控制器的局部变量不会传递到视图,只有Session内容可用)。需要改成:
@if (Session::get('req_submit')) <input type="text" value="{{ Session::get('req_submit') }}" id="input-reqno" class="text-center text-white py-2 " style="background-color: #2f1cac00;border: 0;width: auto;"> @endif
3. 修正Modal的HTML结构错误
你的modal代码末尾少了一个闭合的</div>,会导致DOM结构异常,影响弹窗渲染:
<!-- End Modal --> </div> <!-- 补上这一行,闭合最外层的.modal容器 -->
4. 验证Session传递是否正常
可以临时在视图中添加一行代码,确认Session的值能正常获取:
{{ dd(Session::get('req_submit')) }}
如果能看到正确的token字符串,说明Session传递没问题;否则检查route('home')是否指向正确的视图,或者控制器的重定向逻辑是否有误。
把以上修改全部应用后,应该就能正常显示带token的弹窗了。
内容的提问来源于stack exchange,提问作者Tika Putri
相关产品推荐
相关产品推荐

