立即在Grails中发布所有传入的参数

时间:2016-09-11 14:40:52

标签: javascript grails

我在Grails中有以下JavaScript函数:

function requestPost() {
        var projectNameFilter = $("input[name='project-name-filter']").val();
        var addressFilter = $("input[name='address-filter']").val();

        $.post(
                '${createLink(controller: "listing", action: "transactions")}',
                {
                    projectNameFilter: eval(projectNameFilter),
                    addressFilter: eval(addressFilter),                        
                    listingType: "${params?.listingType}",
                    propertyType: "${params?.propertyType}",
                },
                function (data, status) {
                    $('#dynamic-table').html(data);
                }
        );
    }

请注意两个参数:

  • listingType:" $ {params?.listingType}"
  • propertyType:" $ {params?.propertyType}"

我在这个方法中有很多这些参数,所有这些都应该传递给控制器​​。

现在我的问题是:尽管反复进行这样的整个过程,我怎么能一次性通过所有这些参数。

1 个答案:

答案 0 :(得分:1)

由于你的目标是使用javascript传递所有参数,渲染的html需要显式包含所有参数。因此,不存在内置解决方案(如果您不想使用会话并且不愿意使用已弃用的remoteFunction标记)。一种解决方法是迭代所有参数并插入它们。请注意,这可能是一个安全问题:

$.post('${createLink(controller: "listing", action: "transactions")}',
{
<g:each in="${params}" var="paramKeyValue">
   '${paramKeyValue.key}': '${paramKeyValue.value}',
</g:each>
},...)

我建议做这样的事情:

<g:each in="${['listType', 'propertyType']}" var="paramKey">
   '${paramKey}': '${params."${paramKey}"}',
</g:each>

你也可以这样做:

${params.subMap(['listType', 'propertyType']) as JSON}