2011-08-13 104 views
6

我正在使用jQuery和Ajax構建動態網站。我已經使用歷史插件解決了歷史和後退按鈕的問題。我想在URL中傳遞多個散列參數,而無需在點擊事件中重新加載整個頁面。我想是這樣的:在URL中傳遞多個散列參數

  • something.php#type=abc&id=123
  • something.php/?type=abc&id=123 ...

這可能是傳遞和獲取這樣還挺paramters url中的最佳方式?

<a href="#type=abc&id=123">Click</a> 
if(type==abc && id==123) 
{ 
    do this.. 
} 

通常我們做到這一點,但<a href="something.php?type=abc&id=123">Click</a>重新加載整個頁面。

回答

9

散列值有一組有限的字符,技術上允許在其中。如果您在這裏查看URL spec,則哈希值被稱爲fragmentid。這裏的語法東西它可以包含:

 
fragmentid    xalphas 
xalphas     xalpha [ xalphas ] 
xalpha     alpha | digit | safe | extra | escape 
safe     $ | - | _ | @ | . | & | + | - 
extra     ! | * | " | ' | (|) | , 
escape     % hex hex 
alpha     a | b | c | d | e | f | g | h | i | j | k | 
         l | m | n | o | p | q | r | s | t | u | v | 
         w | x | y | z | A | B | C | D | E | F | G | 
         H | I | J | K | L | M | N | O | P | Q | R | 
         S | T | U | V | W | X | Y | Z 
digit     0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 

你會發現,你可以有&,但不是=,除非你將其設置或檢索它的時候調用encodeURIComponent方法和decodeURIComponent的哈希值。

至於使用什麼技術,這真的取決於你。如果需要在那裏表示多個參數,您可以在散列值中創建自己的小語法。我個人可能會將這些值與&分開,就像在查詢字符串中一樣,但使用-而不是=

+0

是的使我們自己的語法可以是一個解決方案,但它看起來不太好offcialy。我正在使用這樣的事情,使用歷史插件。 queness.com/resources/html/ajax/simple.php#page1現在我需要simple.php#page = page1&something = something ... PLZ HELP FRIENDS – roy

+1

請看我的回答。 @roy提出的是完全合法使用URL fragmentid,並且他不需要用'='替換'-'。事實上,這樣做會減少語義。 – jangosteve

3

就URI而言,你實際上可以做你正在問的東西。

@ jfriend00是正確的,因爲您不能在給定散列值的名稱/值中使用「=」,但是,我認爲他們誤讀了規範中的實際含義。您也不能在URL的查詢字符串的名稱/值中使用「=」字符。爲什麼?因爲它在表示鍵/值對時有特殊的含義。它在散列(aka fragmentid)中的用途相同,這正是您在示例中使用它的原因。

如果你看一下w3.org page for media fragments,第三句規定:

的語法是基於可在URI片段和URI查詢請求被用來限制一個媒體特定名稱 - 值對的規範資源到某個片段。

請注意,它表示您可以將鍵/值對用於URI的查詢和哈希部分。如果你看看further down in the page,你會發現,它描述完全按照你的fragmentid使用它的格式:

名稱 - 值對的列表中URI的查詢或片段組成部分進行編碼。名稱和值組件由等號(=)分隔,而多個名稱/值對由和號分隔(&)。

這就是說,JavaScript沒有內置的方式來以結構化的方式訪問鍵/值對(就像它沒有內置的方法來訪問鍵/值對的查詢字符串)。所以,你就必須建立自己的函數來做到這一點,並有在計算器上其他幾個職位,已經展示瞭如何做到這一點:

+0

這應該是一個評論,這個答案只能證明另一個答案是錯誤的,它實際上並沒有回答這個問題。 –

+3

@Hanoncs它不能作爲評論,因爲評論具有有限的字符限制。另外,它確實回答了這個問題:「哪個可能是在url中傳遞和檢索這樣的參數的最佳方式?'Click''。我的回答是字面上說,是的,你可以使用片段作爲鏈接的href而不是使用查詢字符串URL,從而不需要重新加載頁面來改變URL中的查詢字符串。 – jangosteve