Я пытаюсь использовать пейджер пейджера tablesorter с AJAX, но сталкиваюсь с сом-проблемами (или ограничениями) при попытке обработать AJAX-запрос в моем php-бэкенде.
Например, если таблица настроена с сортировкой по умолчанию
sortList: [ [0,1], [1,0] ]
Я получу URL-адрес, подобный этому, в моем запросе AJAX:
page=0&size=50&filter=fcol[6]=batteri&sort=col[0]=1&col[1]=0
В моем php back end я делаю
$cur_sort = $_GET['sort']
и получить
col[0]=1
Так что последняя часть отсутствует — я думаю, так как она содержит & голец.
Как мне получить весь sort
строка?
Тем не менее, как это строка col[0]=1&col[1]=0
лучше всего разобрать? Мне нужно извлечь информацию, что col 0 должен быть сортировщиком DESC и col 1 ASC.
Вы можете попробовать это;
parse_str($_SERVER['QUERY_STRING'],$data);
Он будет анализировать URL в массив;
Также; вы должны использовать пустой []
вместо [1]
а также [0]
Смотрите больше здесь: parse_str ()
Пример:
$str = "page=0&size=50&filter=fcol[6]=batteri&sort=col[0]=1&col[1]=0";
parse_str($str, $output);
echo $output['page']; // echo 0
И ответить на ваш вопрос; это правильно; эхом col[0]=1
потому что вы разделяете с &
посмотреть здесь:
&сортировать = кол [0] = 1 & Col [1] = 0;
Совет; вместо этого используйте больше имен.
Вы могли бы использовать
&sort[]=1&sort[]=0;
ОБНОВИТЬ:
Чтобы получить доступ к последнему; ты должен сделать, просто;
$_GET['col'][1];
Если вы хотите получить доступ, последний номер в
$_GET['sort'];
Вы можете сделать это;
$explode = explode('=',$_GET['sort']);
$end = end($explode);
echo $end; //it will outout 1
Если вы распечатаете всю query_String
, это напечатает это;
Array
(
[page] => 0
[size] => 50
[filter] => fcol[6]=batteri
[sort] => col[0]=1
[col] => Array
(
[1] => 0
)
)
Я не уверен, как ajaxUrl
опция используется, но вывод в вопросе выглядит неправильно.
У меня действительно есть без понятия как строка в вопросе показывает этот формат:
&sort=col[0]=1&col[1]=0
(где сделал sort=
родом из?)&filter=fcol[6]=batteri
(где сделал filter=
родом из?)Если вы посмотрите на то, как вы можете манипулировать ajaxUrl
вариант, вы увидите этот пример:
ajaxUrl: "http://mydatabase.com?page={page}&size={size}&{sortList:col}&{filterList:fcol}"
Допустим, у вас есть следующие настройки:
sortList
установлен в [[0,1],[3,0]]
(1-й столбец по убыванию, 4-й столбец по возрастанию)['','','fred']
Полученный URL, переданный на сервер, будет выглядеть так:
http://mydatabase.com?page=2&size=10&col[0]=1&col[3]=0&fcol[2]=fred
col
часть {sortList:col}
заполнитель устанавливает имя отсортированного столбца, переданное в URL & fcol
часть {filterList:fcol}
заполнитель устанавливает фильтр для заданного столбца. Так что это не фиксированные имена.
Если вышеуказанный метод использования ajaxUrl
Строка не соответствует вашим потребностям, вы можете оставить эти настройки вне ajaxUrl
и вместо этого используйте customAjaxUrl
вариант изменить URL-адрес по желанию. Вот простой пример (Я знаю, что это не обычный метод):
ajaxUrl: "http://mydatabase.com?page={page}&size={size}",
// modify the url after all processing has been applied
customAjaxUrl: function(table, url) {
var config = table.config,
// convert [[0,1],[3,0]] into "0-1-3-0"sort = [].concat.apply( [], config.sortList ).join('-'),
// convert [ '', '', 'fred' ] into "--fred"filter = config.lastSearch.join('-');
// send the server the current page
return url += '&sort=' + sort + '&filter=' + filter
}
При тех же настройках итоговый URL-адрес теперь будет выглядеть так:
http://mydatabase.com?page=2&size=10&sort=0-1-3-0&filter=--fred
Пока это мое лучшее решение, но оно не очень элегантное:
if (preg_match_all("/[^f]col\[\d+]=\d+/", $_SERVER['QUERY_STRING'], $matches)) {
foreach($matches[0] AS $sortinfo) {
if (preg_match_all("/\d+/", $sortinfo, $matches)) {
if(count($matches[0]) == 2) {
echo "Col: ".$matches[0][0]."<br/>";
echo "Order: ".$matches[0][1]."<br/>";
}
}
}
}
Это дает мне информацию, мне нужно
Col: 0
Order: 1
Col: 1
Order: 0
Но неуклюжий. Есть ли способ лучше?