2014-10-30 68 views
0

假設我在我的網站上有兩個資源列表:用戶和組。當我以10爲增量分頁時,我想保存我的列表狀態,這樣當我將頁面的URL給予某人時,他們將被導航到具有相同頁面大小的同一頁面。如何爲Ajax請求添加/管理持久性URL參數?

這很容易用一個列表,我甚至會放棄Ajax和使用簡單的HTTP參數,而是增加了複雜性,阿賈克斯命令都採取同樣的參數,例如:

user/getlist?maximum=10&offset=0&systemId=123456 
group/getlist?maximum=10&offset=0&systemId=123456 

最初,我正在考慮使用錨點,以便網址如下所示:

admin/users+groups.php#?maximum=10&offset=0&systemId=123456 

但是,這顯然不適用於兩個列表。我可以在jQuery中輕鬆完成這項工作嗎?還是需要在原始JavaScript中編寫代碼?

+0

我不確定我是否完全理解你的問題 - 但是,由於你的最終目標是建立一個鏈接,因此AJAX實際上是脫離了桌面......爲什麼不堅持你原來的計劃,而是做一些簡單的事情,比如添加一個參數列表,你試圖修改,如下所示:'admin/users-groups.php?view = users&max [...]' - ? – 2014-10-30 17:25:48

+0

我正在編寫一個現有的系統,我無法改變這些是Ajax調用的事實。 – NobleUplift 2014-10-30 17:44:40

+0

那問題是什麼?只要你有兩個控制 - 一個對一個列表,一個對另一個,我沒有看到你所描述的任何問題...... – 2014-10-30 17:50:24

回答

0

這是我想出的解決方案。首先,我們需要加載的頁面加載自錨AJAX參數:

$(document).ready(function() { 
    if (window.location.hash.indexOf('#?') == 0) { 
     var hashParameters = window.location.hash.substring(2).split('&'); 
     var hashIndex = 0; 

     for (var i = 0; i < hashParameters.length; i++) { 
      var hp = hashParameters[i] 
      var delim = hp.indexOf('='); 
      var key = hp.substring(0, delim); 
      var value = hp.substring(delim + 1); 

      addParameter(); 
      $('#parameter-' + i + '-key').val(key); 
      $('#parameter-' + i + '-value').val(value); 
     } 
    } else { 
     addParameter(); 
     $('#parameter-0-key').val('id'); 
    } 
}); 

addParameter()是添加AJAX參數頁面視覺上的方法,然後我更新它的值。

然後,它只是一個建立錨點,並將其設置回URL的事情:

function getParameterValues() { 
    // ... 
    var anchor = ''; 
    for (var i = 0; i < index + 1; i++) { 
     var keyName = '#parameter-' + i + '-key'; 
     var valueName = '#parameter-' + i + '-value'; 
     var key = $(keyName).val(); 
     var value = $(valueName).val(); 
     if (typeof key == 'undefined' || typeof value == 'undefined') { 
      continue; 
     } 

     if (key == '') { 
      continue; 
     } 

     // ... 

     if (anchor.length == 0) { 
      anchor += '?' + key + '=' + value; 
     } else { 
      anchor += '&' + key + '=' + value; 
     } 
    } 
    window.location.hash = '#' + anchor; 
    return values; 
} 

這將是很好,如果jQuery的曾經與一個方法來添加/刪除參數,如URL上來這本身。

1

你可以使用逗號(或破折號)分隔符來做到這一點,並使每個列表都成爲查詢字符串參數。

更新,頁面的URL看起來像這樣:
管理/用戶+ groups.php ulist = 10,0,123456 &爲Glist = 12,0,123457

然後在JavaScript中,稱此?函數來獲取查詢字符串參數值:

function getParameterByName(name) { 
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); 
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), 
     results = regex.exec(location.search); 
    return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); 
} 

// you should probably break this out and null check the parameter before splitting, but for the sake of brevity: 
var userListVals=getParameterByName("ulist").split(","); 
var groupListVals=getParameterByName("glist").split(","); 

var userListURL = "/user/getlist?maximum=" + userListVals[0] + "&offset=" + userListVals[1] + "@systemId=" + userListVals[2]; 
var groupListURL = "/user/getlist?maximum=" + groupListVals[0] + "&offset=" + groupListVals[1] + "@systemId=" + groupListVals[2]; 

它依賴於以正確的順序是值,但如果你生成的URL自己,這不應該是一個問題。

更新:

+0

但我正在查詢兩個獨特的資源,user和group。我無法像這樣將列表結合在一起。 – NobleUplift 2014-10-30 17:47:44

+0

查看更改。我認爲這會讓你在URL中得到你想要的所有參數,然後將它們分解成對每個列表ajax請求有用的東西。 – nixkuroi 2014-10-30 20:02:57

+0

NobleUplift,做了這項工作? – nixkuroi 2014-11-04 04:22:22