我正在尝试使用带有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的信息。
答案 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]=0
(sort=
来自哪里?)&filter=fcol[6]=batteri
(filter=
来自哪里?)如果你看一下如何操纵ajaxUrl
option,你会看到这个例子:
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}
部分设置传递给网址&的排序列名称。 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
但是很笨拙。还有更好的方法吗?