2014-09-27 54 views
0

我一直在寻找一种方法来设置一个cookie,如果一个URL参数被持续存在。问题是,URL参数的名称是半动态的。getParameter - 带有动态名称值的URL参数

的网址是:

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

XXXXzzzzz都澳的URL名称的一部分,但可以根据什么在链接改变。

正确的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, " ")); 
} 

if (getParameterByName("transaction")) { 
set_cookie ("Transaction_ID", getParameterByName("transaction")); 
} 

任何想法?

+0

xxxx和zzzz可以是什么类型的值?它只是字母吗?或字母和数字? 如果只有单词事务存在时才设置cookie,那么这还是足够了吗? – wallop 2014-09-27 09:38:00

+0

也是交易总是第一个查询参数? – wallop 2014-09-27 09:40:07

+0

@Wishy xxxx和zzzz可以是字母或数字。该参数可以在链接的任何地方。如果它是第一个,那么它将显示为'transaction [XXXX] [zzzzz] = YYYYY'如果它不是第一个出现'&transaction [XXXX] [zzzzz] = YYYYY' – 2014-09-27 10:00:30

回答

0

检查此JSBIN。这会帮助你。 用window.location.search替换locatStr;以下代码将适用于所有场景

function getParameterByName(){ 
    var locatStr = '?xyz=123&transaction[XXXX][zzzzz]=YYYYY', 
     searchStr = locatStr.split('?')[1], 
     matchArr = searchStr.match(/transaction\[[a-zA-Z0-9]+\]\[[a-zA-Z0-9]+\]/gi),  
     para; 

    if(matchArr){ 
      var temp = searchStr.split(matchArr[0]+'=')[1]; 
     return ((temp.indexOf('&')!=-1) ? temp.split('&')[0] : temp); 
     } 
     else{ 
     return false; 
     } 

} 


var param = getParameterByName(); 
console.log(param); 
if(param){ 
    console.log('set cookie here'); 
} 
else{ 
    console.log('no cookie present'); 
} 

P.S.如果满意,不要忘记接受答案

+0

Cookie已设置,但值保持为“YYYYY”。根据网址中的内容,Cookie值也应该是动态的。我上面提到的 – 2014-09-27 16:17:59

+0

请更改locatStr = window.location.search。值是URL中显示的任何值。 – wallop 2014-09-28 18:26:37