我有一个大型数据集,我试图在控制器本身进行过滤,并仅将相关数据发送到视图(index.gsp;客户端)
视图1:
<form>
<g:select from="['AFFILIATES', 'SEO', 'SEM','DISPLAYADS']" name="mv"
onchange="${remoteFunction(
controller:'Pgtyp',
action:'ajaxGetMv',
params:'\'mv=\' + (this.value)',
onSuccess: 'printpgtyp(data)')}">
</g:select>
</form>
控制器1:
def ajaxGetMv = {
def pgtyp = Pgtyp.executeQuery("select p.visits,p.mv from Pgtyp p where p.mv = ?",[params.mv])
//console.log(params.id)
render pgtyp as JSON
}
现在,这部分在控制台上打印后效果很好,它可以过滤特定&#34; mv&#34;的数据。 但是,我有多个相互独立的下拉(5),我希望所有这5个值始终传递给我的控制器,然后相应地过滤数据以进入视图,但我无法实现这一点。
我使用&#34; html实现了它 - document.getElement&#34;但数据太重,无法在客户端处理(浏览器崩溃) 因此,我需要在groovy控制器端进行过滤。 我通过2次下拉尝试了2个过滤器:
视图2:
<form>
<g:select from="['AFFILIATES', 'SEO', 'SEM','DISPLAYADS']" name="mv"
onchange="${remoteFunction(
controller:'Pgtyp',
action:'ajaxGetMv',
params:'\'mv=\' + (this.value)',
onSuccess: 'printpgtyp(data)')}">
</g:select>
</form>
<form>
<g:select from="['INTERNET EXPLORER', 'MOZILLA', 'GOOGLE CHROME','MOZILLA' ,'OTHERS','SAFARI']"
name="browser"
onchange="${remoteFunction(
controller:'Pgtyp',
action:'ajaxGetMv',
params:'\'browser=\' + (this.value)',
onSuccess: 'printpgtyp(data)')}">
</g:select>
</form>
控制器2:
class PgtypController {
def ajaxGetMv = {
def pgtyp = Pgtyp.executeQuery("select p.visits, p.mv, p.browser from Pgtyp p where p.mv = ? and p.browser = ?",[params.mv & params.browser])
render pgtyp as JSON
}
def index() { }
}
错误:
POST http://localhost:8082/marchmock2/pgtyp/ajaxGetMv 500 (Internal Server Error)
send
x.extend.ajax
onchange
任何建议将不胜感激。 另外,如果这在grails中不可行,请告诉我,但我认为它主要应该是。
答案 0 :(得分:2)
更改
[params.mv & params.browser]
到
[params.mv, params.browser]
在您的hql
查询(Controller2)中。
是的,您正在获取过滤数据。列表清单(包含p.visits,p.mv,p.browser)。您可以获得像
这样的p.visitsjQuery.ajax({
url: '${createLink(controller: 'myController', action: 'myAction')}',
success: function(data){
for (var idx = 0; idx <= data.length - 1; idx++) {
console.info(data[idx][0])
}
}
});