【问题标题】:Issue while trying to append route parameter in js尝试在 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

我错过了什么吗?

【问题讨论】:

    标签: javascript laravel laravel-5


    【解决方案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 等)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 2013-06-26
      • 1970-01-01
      • 2016-01-29
      • 1970-01-01
      相关资源
      最近更新 更多