2016-12-20 27 views
0

我正在使用下面的代碼來獲取在javascript中進行搜索的查詢參數。有沒有特別的原因,爲什麼這將無法處理多個參數?我似乎無法執行它。獲取兩個查詢字符串參數

var params = [], hash; 
var q = document.URL.split('?')[1]; 
if(q != undefined){ 
    q = q.split('&'); 
    for(var i = 0; i < q.length; i++){ 
     hash = q[i].split('='); 
     params.push(hash[1]); 
     params[hash[0]] = hash[1]; 
    } 
} 
+0

你是什麼意思多重?什麼是不起作用的示例網址? – epascarello

+0

@epascarello他的意思是example.com/index.html?param1=foo¶m2=data –

+0

@LeoWilson說得對。 –

回答

1

你可能會使用正則表達式來獲取參數。

var test = 'example.com/index.html?param1=foo&param2=data#icouldhaveahashtoo'; 
 
var params = {}; 
 

 
test.replace(/[?&]([^=]+)[=]([^&#]+)/g, function(match, key, value){ 
 
    params[key] = value; 
 
    return ''; 
 
}); 
 

 
console.log(params);

+0

如果您將測試的值替換爲document.URL,這將是一個完美的解決方案。 –

+0

@LeoWilson我這樣做,這工作完美。非常感謝! –

+0

強制性xkcd:https://xkcd.com/1171/ – Hatchet

-1

看來你的代碼工作正常,但是,它將無法正常使用URL與分配多個值查詢參數的工作(如http://example.com/page.php?param=foo&param=bar)。此外,如果其中一個查詢字符串參數名稱爲length或其他內容,則可能對params陣列造成不利影響 - 嘗試使用其他容器可能會更好。

var params = [], hash; 
var q = 'example.com/index.html?param1=foo&param2=data'.split('?')[1]; 
if(q != undefined){ 
    q = q.split('&'); 
    for(var i = 0; i < q.length; i++){ 
     hash = q[i].split('='); 
     params.push(hash[1]); 
     params[hash[0]] = hash[1]; 
    } 
} 

console.dir(params); // Array[2] 0: "foo" 1: "data" length: 2 param1: "foo" param2: "data" __proto__: Array[0] 

我建議具有params變量是一個對象,並跳過線params.push(hash[1]),因爲可以在使用for..in環容易足夠的屬性迭代和參數的順序當不可反正無論如何。如果某個特定名稱的參數有多個值,那麼該參數的值將是一個數組。例如,?param=foo&param=bar最終會被解析爲{ param: ["foo", "bar"] }

+0

你能提出一些改進嗎? –

+0

@SteveHalla你提到你在實現代碼時遇到了麻煩。如果你能更詳細地瞭解它,這將會有所幫助,否則,我們都在抓秸稈。 – Hatchet

+0

@SteveHalla見編輯。 – Hatchet

相關問題