JQuery Datatables, фильтрация не работает (через ajax / async) - PullRequest
1 голос
/ 13 мая 2011

Я использую JQuery Datatables.Я получаю данные таблицы через ajax и есть метод, который я хотел бы использовать, называемый fnGetColumnData (который получает значения таблицы для каждого столбца).Поскольку ajax является асинхронным, работает на domready, и эта функция является анонимной, в момент, когда она пытается получить данные, данные недоступны.Итак, фильтры SELECT пустые.

Документы @ http://www.datatables.net/examples/api/multi_filter_select.html

Мой код @ http://pastie.org/1896827 (* Я не мог вставить его прямо здесь, потому что панель инструментов не была доступна навремя я отправил.)

Как я могу решить это?

Спасибо за внимание

1 Ответ

1 голос
/ 15 мая 2011

Поскольку вы используете ajax в качестве источника данных, я думаю, что вам нужно заполнить select другим способом, потому что на стороне клиента у вас нет доступа к полным данным столбца.Вы должны взять данные, чтобы добавить выбор также с 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 Я написал код, просто чтобы показать вам свою идею, я не попробовал его, потому что у меня нет доступа к вашим данным на стороне сервера, еслине ясно, я постараюсь быть более точным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...