【问题标题】:Updating multiple parameters in a groovy string from a javascript function从 javascript 函数更新 groovy 字符串中的多个参数
【发布时间】:2012-11-14 13:12:53
【问题描述】:

好的,我是 javascript/grails 新手,我不知道在这里做什么。

基本上我有一个使用多个参数调用的 javascript 函数,我想将它们替换为 grails 可解析字符串。

我有许多 grails 下拉菜单,它们调用 javascript 函数来链接到另一个页面,其中包含需要传递的多个参数(项目编号和数量)。

这里是选择:

<g:select optionKey="key" optionValue="value" value="${item.getQty()}" name="qty" from="[1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9]"
onchange="goToPage('qty${item.id}',this.value)"></g:select>

javascript函数:

<script type="text/javascript">
function goToPage(itemId, val){
window.location.href="${createLink(controller:'GOrder' ,action:'updateShoppingCart' params:[item: "", qty: ""])}" + itemId + val;
}

因此,它采用 itemId 和 val,将它们连接起来,并用连接后的值替换最后一组引号。我想要发生的是为每个参数替换一组引号。

我真的不明白串联一个字符串实际上是如何替换一个值的。

谢谢!

【问题讨论】:

    标签: javascript grails groovy


    【解决方案1】:

    您的服务器端和客户端在这里混为一谈。

    ${createLink(controller:'GOrder' ,action:'updateShoppingCart' params:[item: "", qty: ""])}
    

    在将 GSP 呈现为 HTML 时,由 Grails 在服务器端进行评估,因此您最终在 JavaScript 中得到的结果类似于

    function goToPage(itemId, val){
      window.location.href="/myapp/GOrder/updateShoppingCart?item=&amp;qty=" + itemId + val;
    }
    

    您可能想要的只是在 Grails 端生成直到问号的基本 URL,然后在 JavaScript 中在客户端添加查询参数

    function goToPage(itemId, val){
      window.location.href=
         "${createLink(controller:'GOrder', action:'updateShoppingCart'
             ).encodeAsJavaScript()}?item=" + encodeURIComponent(itemId)
        + "&amp;qty=" + encodeURIComponent(val);
    }
    

    请注意我添加encodeAsJavaScript() 的方式 - 在生成要包含在 JavaScript 字符串文字中的值时,您应该始终使用它,它会反斜杠转义任何需要它的东西。同样,您添加到 URL 的任何 JavaScript 字符串都需要使用 JavaScript encodeURIComponent 函数进行编码 - 例如,如果 itemId 的值是“item one”,您需要将 item%20one 附加到 URL。

    【讨论】:

    • 我刚刚想出了一些类似的东西,但对编码提出了很好的建议!谢谢!
    • 我想知道 url 中编码的“&”,但除此之外,这就是票。
    猜你喜欢
    • 2016-08-21
    • 2011-10-14
    • 2021-12-14
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多