尝试在 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 中的其他数组时获取“无关参数标签”

捕获 tomcat 转储时出现“内存不足或附加权限不足”

尝试将 MediaSource 对象附加为 HTML5 视频标签的源时出现“不允许加载本地资源”错误

Python - 将字典列表附加到嵌套的默认字典时出现关键错误

在 jQuery.each 中附加元素时出现错误