将javascript变量传递给grails params

时间:2013-08-19 17:04:45

标签: javascript grails

所以我需要将javascript变量传递给grails参数来构建和下载文件。所以最初用ajax做这个只是为了得知ajax没有做下载。最初这样的工作原理如下:

<script type="text/javascript" charset="utf-8">
    function myFunction() {

        jQuery.ajax({
            url: "Search/download",
            type: "POST",
            data: {facets: visualSearch.searchQuery.facets()}
        });
    }
</script>
<input type="button" onclick="myFunction()" value="download">

虽然这正确地传递了映射,但这并没有进行下载。

所以现在我想用g:link

做类似的事情
<g:link controller="Search" action="test" params="[facets: '\$(visualSearch.searchQuery.facets())']" >TEST GRAILS</g:link>

但我在控制器中的所有参数都是

facets=$(visualSearch.searchQuery.facets())
action=test
controller=search

如何修复此问题以将facet(无论是已解析还是未解析)传递到控制器中。谢谢!

3 个答案:

答案 0 :(得分:3)

params中添加javascript变量无效。 g:link在服务器端执行,不知道您的javascript值。您可以删除此params,而是在链接的“onclick”事件中添加代码,以便在参数中设置您的javascript值。

像: 在gsp页面中,

<g:link name="searchLink" controller="Search" action="test">TEST GRAILS</g:link>

然后在javascript(在同一页面中),

$(function() {
  $('a[name="searchLink"]').bind('click', function() {
    $(this).attr('href', $(this).attr('href') + '?facets=' + visualSearch.searchQuery.facets());
  })
})

基本上你使用Grails来生成超链接,然后使用JQuery将带有参数的查询字符串附加到该href

希望有所帮助。

答案 1 :(得分:1)

在这些情况下我倾向于使用g:link来生成URL,但是然后使用jQuery覆盖默认行为以进行ajax调用:

<g:link class="searchLink" controller="Search" action="test" params="[facets: '\$(visualSearch.searchQuery.facets())']" >TEST GRAILS</g:link>

$('.searchLink').on('click', function(e) {
  e.preventDefault(); // prevent default link behavior

  var $element = $(this);
  var url = $element.prop('href');

  $.post(url, function(data) { 
    // callback if you need it
  });
});

答案 2 :(得分:0)

根据您的想法,我认为您应该创建一个表单并在点击事件中提交:

<script type="text/javascript" charset="utf-8">
    function myFunction() {
        $('<form>', {
            "html": '<input type="text" name="facets" value="' + visualSearch.searchQuery.facets() + '" />',
            "action": '${createLink(controller: "Search", action: "test")}',
            "method": 'POST'
        }).appendTo(document.body).submit();
    }
</script>
<input type="button" onclick="myFunction()" value="download">

或重构您的代码以获得真正的html表单并在提交之前为其准备数据。