我正在向我的控制器发送字符串数组,其中包含Ids数组。
function submit(){
var ids = [];
bootbox.confirm("Are you sure to send data?", function(confirmed){
if(confirmed){
$('input[id^="tdCheckbox_"]').each(
function () {
var $this = $(this);
if($this.is(":checked")){
ids.push($this.attr("id").replace("tdCheckbox_",""));
}
}
);
$("#Ids").val(ids);
$("#submitForm").submit();
}
});
}
<g:formRemote name="submitForm" url="[controller:'myController', action:'submit']" onSuccess="removeIds(data)">
<g:hiddenField name="Ids" />
</g:formRemote>
控制器:
def submit(){
def result = [success:false]
if(params?.Ids){
String[] ids = params?.Ids
ids.eachWithIndex{ it, int i ->
//HERE OUTPUT IS LIKE
//4
//,
//5
//,
//6
println(it.value)
}
result["id"] = params?.Ids
}
render result as JSON
}
在eachWithIndex循环中,我得到输出,(逗号)我不需要,我认为必须有一个很好的选择来循环它。
请同样建议。
答案 0 :(得分:1)
您从javascript提交一个字符串值(使用逗号分隔的ID)的问题
ids=1,2,33
并且在groovy / grails的级别上params?.Ids
只返回一个像这样的字符串:"1,2,33"
并将String
分配给String[]
只是按字母分割...
作为groovy中的解决方法,您可以使用params?.Ids?.split(',')
String[] ids = "1,2,33".split(',')
或通过javascript提交多个值,如下所示:
ids=1 & ids=2 & ids=33
在这种情况下,如果多于一个以相同名称提交的值,grails将为params?.Ids
表达式返回一个数组