Ajax 通过视图下拉列表筛选控制器中的数据

Ajax 通过视图下拉列表筛选控制器中的数据,ajax,grails,groovy,filter,Ajax,Grails,Groovy,Filter,我有一个很大的数据集,我正试图在控制器中对其进行过滤,并仅将相关数据发送到视图(index.gsp;客户端) 视图1: <form> <g:select from="['AFFILIATES', 'SEO', 'SEM','DISPLAYADS']" name="mv" onchange="${remoteFunction( controller:'Pgtyp', action:'ajaxGetMv', params:'

我有一个很大的数据集,我正试图在控制器中对其进行过滤,并仅将相关数据发送到视图(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>
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
}
<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>
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
现在,这个部分在控制台上打印后工作得很好,它过滤特定“mv”的数据。 但是,我有多个相互独立的下拉列表(5),我希望所有这5个值始终传递给我的控制器,然后相应地过滤数据以进入视图,但我无法实现这一点

我使用“html-document.getElement”实现了它,但是数据太重,无法在客户端处理(浏览器崩溃) 因此,我需要在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>
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
}
<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>
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
错误:

<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>
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
}
<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>
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中不可行,请告诉我,但我认为它应该是可行的。

更改

[params.mv & params.browser]

在您的
hql
查询中(Controller2)


是的,您正在获得过滤数据。列表列表(包含p.visions、p.mv、p.browser)。你可以像这样得到p

jQuery.ajax({
    url: '${createLink(controller: 'myController', action: 'myAction')}',
    success: function(data){
        for (var idx = 0; idx <= data.length - 1; idx++) {
            console.info(data[idx][0])    
        }
    }
});
jQuery.ajax({
url:“${createLink(控制器:'myController',操作:'myAction')}”,
成功:功能(数据){

对于(var idx=0;idx您是否为两个ajax调用调用同一个控制器?是的,我修改了它,错误消失了。谢谢!现在,在控制台中它正在打印:[each:function,eachSlice:function,all:function,any:function,collect:function…]-如果我打开它,就会显示“length”和“proto:Array[0]”,如果我展开后者,会有一个完整的变量列表。但是,我需要访问“p.visions”,这是我在控制器中选择的。我该怎么做?这是我得到的过滤数据吗?进行了编辑,但控制台还没有打印任何内容。此外,网络中的文件大小相同。如果文件实际被过滤,大小必须不同,因此看起来不像是在过滤。你说的过滤是什么意思,可能是我走错了?所以我有一个大数据集,我正试图通过使用ajax和grails中的remotefunction使index和controller talk进行过滤。只有一个下拉列表,它工作得很好。现在,当用户选择第二个或第三个下拉列表时,应该使用第二个(或第三个)新值对数据进行进一步过滤下拉列表以及第一个下拉列表的静态值(现在没有更改)。类似地,有5个下拉列表,进入浏览器的数据应该被过滤,对于所做的5个选择中的任何一个,我们需要同时将5个过滤器的值传递给控制器,而不管它是否更改。我尝试了更多选项,如“params:'\'param1=\'+this.value+\'&booleanparm2=true\''