如何在使用AJAX的pager插件时解析URL

时间:2015-09-26 18:11:16

标签: php regex tablesorter

我正在尝试使用带有AJAX的tablesorter pager插件,但在我的php后端尝试处理AJAX请求时遇到了som问题(或限制)。

如果例如。该表设置为默认排序

sortList: [ [0,1], [1,0] ]

我将在我的AJAX请求中获得这样的URL:

page=0&size=50&filter=fcol[6]=batteri&sort=col[0]=1&col[1]=0

在我的php后端我做了

$cur_sort = $_GET['sort']

并获取

col[0]=1

所以最后一部分丢失了 - 我想因为它包含一个&焦炭。

如何获取整个sort字符串?

那说如何最好地解析字符串col[0]=1&col[1]=0?我需要提取col 0是分拣机DESC和col 1 ASC的信息。

3 个答案:

答案 0 :(得分:3)

你可以试试这个;

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,因为您要使用&进行划分,请参阅此处:

  

& sort = col [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
        )

)

答案 1 :(得分:1)

我不确定如何使用ajaxUrl选项,但问题中分享的输出看起来并不正确。

我真的不知道问题中的字符串如何显示此格式:

  • &sort=col[0]=1&col[1]=0sort=来自哪里?)
  • &filter=fcol[6]=batterifilter=来自哪里?)

如果你看一下如何操纵ajaxUrl option,你会看到这个例子:

ajaxUrl: "http://mydatabase.com?page={page}&size={size}&{sortList:col}&{filterList:fcol}"

所以说你有以下设置:

  • page = 2
  • size = 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}部分设置传递给网址&的排序列名称。 fcol占位符的{filterList:fcol}部分设置了set列的过滤器。所以那些不是固定名称。

如果使用ajaxUrl字符串的上述方法并不适合您的需要,您可以将这些设置保留在ajaxUrl之外,而是使用customAjaxUrl option修改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

答案 2 :(得分:0)

到目前为止,这是我自己的最佳解决方案,但它不是很优雅:

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

但是很笨拙。还有更好的方法吗?