2011-12-03 56 views
1

我想寫一個Javascript函數來獲取瀏覽器的查詢字符串,並允許將新的鍵/值傳遞給該函數。如果密鑰存在,我需要替換該值。由於我已經花了最後3.5小時,所以我還沒有到達替換部分。Javascript:使用查詢字符串

到目前爲止,我在這裏使用的答案是:How to get the query string by javascript?以獲取查詢字符串。然而,這似乎並沒有工作...我與測試的網址是:http://www.site.com/poo?drwho=tombaker&companion=k9

var assoc = {}; 
    var decode = function (s) { return decodeURIComponent(s.replace(/\+/g, " ")); }; 
    var queryString = location.search.substring(1); 
    var keyValues = queryString.split('&'); 

    for(var i in keyValues) { 
    var key = keyValues[i].split('='); 
    assoc[decode(key[0])] = decode(key[1]); 
    } 

    if(assoc["dr"] === undefined) { 
    // not found. todo: replace 
    } 

我真的appricate任何幫助!有沒有更簡單的方法使用JQuery來做到這一點?

+2

「看起來不起作用」是什麼意思? – gilly3

+0

因爲它什麼都不做。它說assoc數組是空的。 –

+0

當我嘗試你的代碼並添加一個alert(assoc [「drwho」]);'最後,它輸出「tombaker」,正如預期的那樣... – codeling

回答

2

將您的代碼複製並粘貼到此處:http://jsfiddle.net/6KcWh/5/,並添加了對JSON.stringify()的調用,以檢查assoc的內容。原來assoc不是未定義的。但是,當然assoc.dr是未定義的,因爲沒有查詢字符串參數dr。有查詢字符串參數drwho。看起來你正在尋找錯誤的查詢字符串參數。

1

您似乎有誤用for...in

嘗試將您的for循環轉換爲標準for (i = 0 ; i < keyValues.length; i++),並查看一些other answers關於for...in在JavaScript中的用途。

+0

謝謝,我試過了,它說assoc是未定義的。 –

+0

這裏沒有誤用; 「for ... in」構造是適合「每個」循環的,javascript語法 – codeling

+0

適用於我http://jsfiddle.net/3afJH/ –