Grails RemoteFunction参数语法
我试图在grails中将几个参数传递给remoteFunction,但我很难正确格式化它 我想在页面上传入一段数据的值加上我刚刚用Tab键弹出的文本框的值,因此在我的onblur中,我有如下内容: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
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>