2014-09-27 53 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