2014-09-23 54 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