2011-05-13 53 views
1

我正在使用JQuery Datatables。我通过ajax获取表数据,并且有一个我想要使用的方法,称为fnGetColumnData(为每列获取表值)。由于ajax是异步的,在domready上运行,并且此函数是匿名的,所以在尝试getdata时,数据不可用。所以,SELECT滤镜是空白的。JQuery Datatables,filtring不工作(槽ajax /异步)

文档@http://www.datatables.net/examples/api/multi_filter_select.html

我的代码@http://pastie.org/1896827 (*我不能正确粘贴在这里,因为工具条我张贴的时间是不可用的。)

我怎样才能解决这个问题?

感谢您寻找

回答

1

由于您使用AJAX作为数据源,我认为你必须填充选择以另一种方式,因为在客户端你没有访问列的全部数据。你必须把数据用AJAX加上选择。我最好是这样的:

我会改变这一呼吁

this.innerHTML = fnCreateSelect(oTable.fnGetColumnData(i));

this.innerHTML = fnCreateSelect(i); 

然后

改变fnCreateSelect,使其得到选项从一个Ajax源这样

function fnCreateSelect(iColumnNumber) 
{ 
    var r='<select><option value=""></option>'; 
    $.getJSON(
       'createSelect.php', 
       { colNumber: iColumnNumber }, 
       function (json) 
       {//i don't check for success to make things simpler 
         foreach (option in json.data){ 
          r += '<option value="'+option.name+'">'+option.name+'</option>'; 
         } 
       } 
       ); 
    return r+'</select>'; 
} 

而不是有一个createSelect.php文件,做这样的事情:

$colNumber = $_GET['colNumber']; 
switch($colNumber){ 
case '0': $sql = "SELECT DISTINCT colName0 from table"; 
      break; 
case '1': $sql = SELECT DISTINCT colname1 from table" 
      break; 
//make as many cases as the number of your columns then retrieve the data from the DB and return the json 
} 

通过这种方式,您可以使用他们拥有的实际数据填充选择过滤器已经过滤

PS我已经写了代码,只是为了向您展示我的想法,我没有尝试过,因为我没有访问您的服务器端数据,如果它不清楚,我会尝试更精确。