尝试在 js 中附加路由参数时出现问题
Posted
技术标签:
【中文标题】尝试在 js 中附加路由参数时出现问题【英文标题】:Issue while trying to append route parameter in js 【发布时间】:2017-12-03 23:32:20 【问题描述】:下面是我的 js 代码,它将路由及其参数附加到锚标记中。
var href = "!! route('ShowUserMainForm', ['RoleID'=>" + row.RoleID + "]) !!";
var UserColumn = "<td><a href=' " + href + "'><button>Users</button></a></td>";
它给出了下面的网址
http://localhost:1234/public/system-users/%20+%20row.RoleID%20+%20
我期待在下面。
http://localhost:1234/public/system-users/1
我错过了什么吗?
【问题讨论】:
【参考方案1】:没有。方法:
因为 !! !! 块代码在 javascript 代码之前呈现,因此您需要创建路由,然后在 !! !!。
如果 row.RoleID 是 json :
var href = "public/system-users/" + row.RoleID
或
var href = "!! route('ShowUserMainForm') !!" + row.RoleID;
或
var href = "!! route('ShowUserMainForm', ['RoleID'=>'']) !!" + row.RoleID;
【讨论】:
【参考方案2】:%20
-> 空格字符的百分比编码
您看到的是这个字符串被分配为RoleID
的值:+ row.RoleID +
。
你在那些外部引号内运行 Laravel,所以只需删除 JS 字符串连接,并直接编写 php(假设你在服务器端有一个 $row
变量可用):
var href = "!! route('ShowUserMainForm', ['RoleID'=> $row.RoleID]) !!";
当 Laravel 将你的路由渲染到锚标签中并构建 html(在 !! !!
中发生的所有事情)时,你就在服务器上进行操作。当您运行 javascript 时,您就在客户端中。您无法以您尝试的方式将数据从客户端发送到服务器。
【讨论】:
row 是 JSON 对象,roleID 是它的 JSON 属性 行是客户端 JSON 变量 对,这就是为什么你不能在!! !!
中使用row
,你必须在服务器端使用$row
之类的东西。该代码已经在服务器上运行,大概是blade template。因此,当您在 client 端拥有 javascript 对象时,为时已晚。请求-响应生命周期已终止。您无法重新渲染该路由,除非您在浏览器中单独执行此操作(使用 dom mainpulation 等)。以上是关于尝试在 js 中附加路由参数时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
在更改事件中将文本附加到 Summernote 元素时出现问题
尝试将数组附加到 Swift 中的其他数组时获取“无关参数标签”
尝试将 MediaSource 对象附加为 HTML5 视频标签的源时出现“不允许加载本地资源”错误