2015-09-26 50 views
1

我想使用AJAX的tablesorter尋呼機插件,但運行到som的問題(或限制),當試圖處理我的PHP後端的AJAX請求。如何解析與AJAX使用尋呼機插件時的URL

如果例如。該表是建立與

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

默認排序我會得到這樣的URL對我的AJAX請求:

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

在我的PHP後端我做了

$cur_sort = $_GET['sort'] 

並獲得

col[0]=1 

因此,拉斯t部分丟失 - 我想因爲它包含一個&字符。

如何獲得整個sort字符串?

那說明字符串col[0]=1&col[1]=0最好怎麼解析?我需要提取col 0將作爲sorter DESC和col 1 ASC的信息。

回答

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因爲你與&除以在這裏看到:

&排序= COL [0] = 1 & COL [1] = 0;

建議;改用更多的名字。 你可以使用

&sort[]=1&sort[]=0;

UPDATE: 要訪問最後一個;你應該這樣做,簡單地說;

$_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 
     ) 

) 
+0

我challange是我無法控制該網址。它是由tablesorter生成的,所以我必須使其工作。 –

+0

查看最新的答案。 –

+0

+1,但正在使用的URL格式不正確。請參閱我的答案,因爲傳呼機確實可以讓網址更具個性化。 – Mottie

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 

不過是clumbsy。有沒有更好的辦法?

1

我不確定如何使用ajaxUrl選項,但問題中共享的輸出看起來不正確。

我真的不知道如何在問題的字符串顯示格式爲:(?從何從sort=

  • &sort=col[0]=1&col[1]=0
  • &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]](第一列降序排序,第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