2011-05-13 75 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我已經寫了代碼,只是爲了向您展示我的想法,我沒有嘗試過,因爲我沒有訪問您的服務器端數據,如果它不清楚,我會嘗試更精確。