Как разобрать URL при использовании плагина пейджера с AJAX

Я пытаюсь использовать пейджер пейджера 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.

1

Решение

Вы можете попробовать это;

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
)

)
3

Другие решения

Я не уверен, как 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}"

Допустим, у вас есть следующие настройки:

  • страница = 2
  • размер = 10
  • 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
1

Пока это мое лучшее решение, но оно не очень элегантное:

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

Но неуклюжий. Есть ли способ лучше?

0
По вопросам рекламы [email protected]