Laravel中通过AJAX传递记录ID至资源控制器编辑时出错
问题解决:Laravel AJAX传递ID到资源控制器编辑时的常量未定义错误
错误原因
你写的Blade模板代码{{ route('users.edit', id) }}里的id是JavaScript变量,但Blade是服务器端先解析的,PHP会把这个id当成自己的常量,而你没定义过这个常量,所以抛出错误。
三种可行的解决方法
方法一:路由模板替换ID
先让Blade生成带占位符的路由,再用JS替换成实际ID:
function editdetails(id) { // 用:id作为占位符生成路由模板 let editUrl = "{{ route('users.edit', ':id') }}".replace(':id', id); $.ajax({ type: 'GET', url: editUrl, success: function(data){ console.log(data); } }); }
方法二:拼接ID到路由末尾
利用Laravel资源路由的格式,直接把ID拼在基础路由后面:
function editdetails(id) { $.ajax({ type: 'GET', // 生成不带ID的基础路由,再拼接ID url: "{{ route('users.edit', '') }}/" + id, success: function(data){ console.log(data); } }); }
方法三:从DOM元素的data属性获取预生成路由
如果触发函数的元素(比如按钮)和用户记录绑定,可以直接在Blade里预生成完整路由,存在元素的data属性里:
<!-- 假设$user是当前循环的用户模型 --> <button onclick="editdetails(this)" data-edit-url="{{ route('users.edit', $user->id) }}">编辑详情</button>
function editdetails(btn) { // 从按钮的data属性里拿预生成好的完整路由 let editUrl = btn.getAttribute('data-edit-url'); $.ajax({ type: 'GET', url: editUrl, success: function(data){ console.log(data); } }); }
内容的提问来源于stack exchange,提问作者abu abu
相关产品推荐
相关产品推荐

