Grails RemoteFunction参数语法

Grails RemoteFunction参数语法,grails,Grails,我试图在grails中将几个参数传递给remoteFunction,但我很难正确格式化它 我想在页面上传入一段数据的值加上我刚刚用Tab键弹出的文本框的值,因此在我的onblur中,我有如下内容: onblur=${remoteFunction(action:'dave', update:'pack'+it.id, params:[denom:document.getElementById(denomValue+${it.id}).value , amoun

我试图在grails中将几个参数传递给remoteFunction,但我很难正确格式化它

我想在页面上传入一段数据的值加上我刚刚用Tab键弹出的文本框的值,因此在我的onblur中,我有如下内容:

onblur=${remoteFunction(action:'dave',  update:'pack'+it.id,
         params:[denom:document.getElementById(denomValue+${it.id}).value ,
         amount:this.value ])}
这不会编译-我也不会用不同数量的单引号和转义字符进行任何排列

我想真正让我难堪的是我不知道;我真的不明白我想在这里创造什么。这是否像使用JSP代码创建JavaScript一样,我将在以后执行它?该表达式何时求值?是在编译页面时求值?还是在调用oblur时求值


非常感谢您的帮助。

看起来您把服务器端代码和客户端代码弄混了

Grails代码将在“构建”页面以发送到客户端浏览器时进行评估

页面交付到浏览器后,将对Javascript代码进行评估

考虑到这一点,让我们看一下你的模糊分配:

onblur=${remoteFunction(
         action:'dave', 
         update:'pack'+it.id, 
         params: [denom: document.getElementById(denomValue+${it.id}).value, 
                  amount: this.value ])}
假定${remoteFunction…}调用是一个Grails标记,它将在服务器上计算,生成一个固定字符串,然后发送到客户端。调用中的所有内容都必须是有效的Groovy代码

看看params映射,您在Groovy代码中的denom值中添加了一些Javascript:

document.getElementById(denomValue
然后尝试从Groovy添加一个值

+${it.id}
然后再来点Javascript

).value
Groovy编译器将尝试将Javascript作为Groovy代码进行评估,但失败了

如果需要访问Javascript中的客户端参数,则需要自己处理Javascript(而不是使用remoteFunction标记),例如,处理远程调用:

var path=${createLink(action:'dave',
                      params: [amount:this.value])} 
           + "&denom=" 
           + document.getElementById(denomValue+${it.id}).value
您还需要自己使用Javascript来处理远程响应,以更新“pack”元素。您可以随时查看remoteFunction调用生成的内容,将其复制到页面中,并对其进行编辑以执行所需操作


HTH

或者您可以传递由“&”分隔的参数,如


params:'\'param1=\'+this.value+\'&booleanParam2=true\'

您实际上仍然可以使用远程函数标记,您只需将参数写入javascript对象字符串,因此这在我使用的东西中实际上非常有效

var denomValue = document.getElementById(denomValue+${it.id}).value;
onblur=${remoteFunction(
     action:'dave', 
     update:'pack'+it.id, 
     params: '{denom: denomValue, amount: this.value}'
     )}

我也有同样的问题,但上面的所有答案都没有帮助,因为我想要得到的值是从选择下拉列表中选择的值,以及正在迭代的表中的obj实例。下面是解决方案

<g:select
                                             from="${list}" 
                                      optionKey="value"
                                      optionValue="key"

                                      onchange="getValue(this.value, ${instance.id})"/>

    <script type="text/javascript">     
              function getValue(Id1, Id2)
              {

                  $.ajax({
                      type: 'POST',
                      url: '/app/controller/functionToCall',
                      data: { someId: Id1, otherId:Id2},

                  });

              }

函数getValue(Id1、Id2)
{
$.ajax({
键入:“POST”,
url:“/app/controller/functionToCall”,
数据:{someId:Id1,otherId:Id2},
});
}
Confirmar
函数ajaxFunction(id){
var obs=$(“#observacion”).val()
var参数={“serieId”:id,
“观测”:观测系统
}
}

+1以获取深入的技术解释,许多人对此感到困惑。混合使用客户端和服务器端理解可能会令人困惑,尤其是当服务器端语言试图为您生成Javascript时。虽然自己处理Javascript中的所有内容的方法是合理的,但是对params answer的正确转义对于一次性调用更有意义
<button type="button" class="btn btn-success" id="value-pie" onClick="ajaxFunction(this.value)">Confirmar</button>

<script>
function ajaxFunction(id){
     var obs = $("#observacion").val()
     var parameters = { "serieId":id,
                        "observacion":obs
                      }
     <g:remoteFunction controller="control"
                  action="ajax"
                  method="GET"
                  onSuccess="updateModal(data)"
                  params="parameters"/>
}
</script>