2014-09-23 19 views
1

我一直在尋找一種方法來設置一個cookie,如果一個URL參數持續存在。問題是,URL參數的名稱是半動態的。Javascript:設置cookie - 動態URL參數名稱

的網址是:

http://zzzz.test.bbbb/index.html?transaction[XXXX]=YYYYY 

的XXXX是將根據客戶的變化,YYYY是實際值(交易號)的用戶ID。

我有以下代碼,但它不會識別brakets,也不會識別內部。我如何設置它來識別包括胸罩和動態用戶ID在內的URL參數?

這裏是我的代碼:

function URLparam(name) { 
    return unescape(
     (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1] 
    ); 
} 

if (URLparam("transaction") !== null && !get_cookie ("Transacion_ID")) { 
    set_cookie ("Transacion_ID", URLparam("transaction")); 
} 

if (get_cookie ("Transacion_ID")) { 
    console.log(get_cookie ("transaction")); 
} 
}); 

任何暗示將不勝感激。

謝謝!

NEW ADDITION ==========================

對於具有以下格式的鏈接:

http://zzzz.test.bbbb/index.html?transaction[XXXX][zzzzz]=YYYYY 

正確的getParameterByName函數如何識別URL參數transaction[XXXX][zzzzz]

我已經試過,但它不工作:

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

任何想法?

+0

你正在設置的cookie是'Transacion_ID',你爲什麼要記錄'transaction'? – Barmar 2014-09-23 08:37:58

+0

您正在查找名爲'transaction'的URL參數,而不是'transaction [XXXX]'。 ''URLparam()'函數中沒有任何內容允許'name'後的可選括號。 – Barmar 2014-09-23 08:39:38

+0

Cookie的名稱可以更改。主要問題是如何查找URL參數'transaction [XXXX]',其中XXX是任何數字值,並且括號也是可識別的 – 2014-09-23 08:48:12

回答

0

此的URLparam()版本允許名稱之後的可選[XXX]

function URLparam(name) { 
    return unescape(
     (RegExp(name + '(?:\\[\\d+\\])?=' + '(.+?)(&|$)').exec(location.search)||[,null])[1] 
    ); 
} 

要允許多個數組索引,更改?(用於可選的)來*(用於任何數目的重複):

function URLparam(name) { 
    return unescape(
     (RegExp(name + '(?:\\[\\d+\\])*=' + '(.+?)(&|$)').exec(location.search)||[,null])[1] 
    ); 
} 
+0

是的!完美...這正是我一直在尋找的。感謝Barmar! – 2014-09-23 09:05:45

+0

我在URL參數名稱中包含方括號中的兩個值的鏈接遇到同樣的問題。我更新了顯示我正在使用的代碼的問題 – 2014-09-27 08:40:14

+0

太棒了!謝謝,它工作! – 2014-09-28 10:43:45