将寻呼机插件与 AJAX 一起使用时如何解析 URL
How to parse URL when using the pager plugin with AJAX
我正在尝试将 tablesorter pager 插件与 AJAX 一起使用,但在尝试处理 AJAX 请求时 运行 遇到了一些问题(或限制)我的 php 后端。
如果例如。 table 设置为默认排序
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 的信息。
你可以试试这个;
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
)
)
这是我自己目前为止最好的解决方案,但不是很优雅:
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
但是很笨拙。有没有更好的方法?
我不确定 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}"
假设您有以下设置:
- 页数 = 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
{sortList:col}
占位符的 col
部分设置传递给 URL 的排序列名,而 {filterList:fcol}
占位符的 fcol
部分设置过滤设置列。所以这些不是固定名称。
如果上述使用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
我正在尝试将 tablesorter pager 插件与 AJAX 一起使用,但在尝试处理 AJAX 请求时 运行 遇到了一些问题(或限制)我的 php 后端。
如果例如。 table 设置为默认排序
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 的信息。
你可以试试这个;
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
)
)
这是我自己目前为止最好的解决方案,但不是很优雅:
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
但是很笨拙。有没有更好的方法?
我不确定 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}"
假设您有以下设置:
- 页数 = 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
{sortList:col}
占位符的 col
部分设置传递给 URL 的排序列名,而 {filterList:fcol}
占位符的 fcol
部分设置过滤设置列。所以这些不是固定名称。
如果上述使用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