【问题标题】:how to use grails ${createLink} in javascript如何在 javascript 中使用 grails ${createLink}
【发布时间】:2013-09-12 09:38:26
【问题描述】:

我有一个javascript函数如下

function GetSelectedItem()
{
    var e = document.getElementById("country");
    var strSel =  e.options[e.selectedIndex].value;
    alert(strSel);
    var url = "${createLink(controller:'country', action: 'wholeTestUnits', id: strSel)}"
    alert(url);
 }

当我点击提交按钮时,我想去那个 url 操作

<button class="submit_small" onClick="GetSelectedItem();">
    <span><g:message code="default.button.submit.label" /></span>
</button>

这个${createLink} 不工作。

【问题讨论】:

  • 您的网址是否显示在警报中?
  • 普惠制页面有这个功能吗?

标签: javascript grails


【解决方案1】:

一种不需要 JavaScript 代码在您的 GSP 中的更好方法如下:

<button class="submit_small" onClick="GetSelectedItem();" data-url="${createLink(controller:'country', action: 'wholeTestUnits')}">
    <span><g:message code="default.button.submit.label" /></span>
</button>

function GetSelectedItem() {
    var button = event.target;
    var e = document.getElementById("country");
    var strSel =  e.options[e.selectedIndex].value;
    var url = button.getAttribute("data-url") + "/" + strSel;
}

【讨论】:

    【解决方案2】:

    我认为您遇到了服务器端/客户端问题。 createLink运行在服务端,JS运行在客户端...

    试试:

    var url = '${createLink(controller:'country', action: 'wholeTestUnits')}' + strSel ;
    

    【讨论】:

    • 该函数是在 JS 脚本还是 GSP 中?你能量化'不工作'吗?只是说“它不起作用”并不能真正帮助任何人帮助你......
    • 它是一个 gsp 页面内的 javascript 函数
    • 那么你得到了什么错误?如果查看页面的源代码,生成的 javascript 是什么样的?
    【解决方案3】:

    我认为,您没有在链接中获得 strSel 的价值。 你可以试试这个。

    function GetSelectedItem()
    {
            var e = document.getElementById("country");
            var strSel =  e.options[e.selectedIndex].value;
            alert(strSel);
            var url = "${grailsApplication.config.grails.serverURL}/country/wholeTestUnits/" + strSel
            alert(url);
    }
    

    【讨论】:

    • 您需要在使用前定义该属性
    【解决方案4】:

    您可以构建自己的 URL 并使用该 URL,而不是使用 createLink。不过,您必须注意控制器名称中的大写字母。

    var url="${ createLink(controller:'testcontroller', action:'getData') }";

    等价于

    var url = "/testcontroller/getData;

    如果你想将参数从 javascript 传递给控制器​​,你可以这样做。

    var url = "/testcontroller/getData?arg0=" + arg0 + "&arg1=" + arg1;
    

    要在控制器中提取参数,请使用 params 关键字。 因此,要在控制器中打印参数,请执行以下操作:

    println params.arg0
    println params.arg1
    

    【讨论】:

    • 如果在 cookieless 模式下,您将不会在 url 中添加会话 ID。
    【解决方案5】:
        --in gsp file--
       <a href="#" onclick="callAjax('${createLink(controller:'shift',action: 'addShift')}');" >Add/Edit Shift</a>
    
    
        --in js file--
        function callAjax(path){
        //path->/shift/addShift
           var xmlhttp = new XMLHttpRequest();
                    xmlhttp.onreadystatechange = function() {
                        if (this.readyState == 4 && this.status == 200) {
                            document.getElementById("updateContent").innerHTML = this.responseText;
                        }
                    };
                    xmlhttp.open("GET", path, true);
                    xmlhttp.send();
          }
    

    【讨论】:

      【解决方案6】:

      试试这个: var url = "${createLink(controller:'country', action: 'wholeTestUnits', params:[id: strSel], absolute: true)}"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-17
        • 2013-09-14
        • 1970-01-01
        • 1970-01-01
        • 2012-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多