getParameter — параметр URL с динамическими значениями имени

Я изо всех сил пытался найти способ установить файл cookie, если параметр URL присутствует. Проблема в том, что имя параметра URL наполовину динамическое.

URL-адрес будет:

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

Где XXXX и zzzzz являются частью имени 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"));
}

Есть идеи?


person adrian.m123    schedule 27.09.2014    source источник
comment
какие могут быть значения xxxx и zzzz? Это только алфавиты? или алфавиты и цифры? Также достаточно ли установить cookie, если присутствует только слово «транзакция»?   -  person wallop    schedule 27.09.2014
comment
Также всегда ли транзакция является первым параметром запроса?   -  person wallop    schedule 27.09.2014
comment
@Wishy xxxx и zzzz могут быть буквами или цифрами. Параметр может быть где угодно в ссылке. Если это первый, он будет отображаться как ?transaction[XXXX][zzzzz]=YYYYY, если он не первый, он появится как &transaction[XXXX][zzzzz]=YYYYY   -  person adrian.m123    schedule 27.09.2014
comment
Слово transaction — это только имя параметра URL, я буду устанавливать куки, запустив функцию if (getParameterByName("transaction")) { set_cookie ("Transaction_ID", getParameterByName("transaction")); }   -  person adrian.m123    schedule 27.09.2014
comment
Адриан, извини, я не объяснил более ясно. Я хотел создать регулярное выражение для вас, поэтому я задал эти вопросы. Я очень хорошо знаю, что они означают.   -  person wallop    schedule 27.09.2014
comment
О, я вижу. Да, transaction всегда является первым параметром запроса. И да, достаточно, если куки будут установлены, когда в URL присутствует слово transaction   -  person adrian.m123    schedule 27.09.2014
comment
хорошо, я прикрепил код ниже, который будет работать, даже если транзакция не является первым параметром запроса, и он будет проверять всю транзакцию [xxxx][zzzzz] вместо просто «транзакция»   -  person wallop    schedule 27.09.2014


Ответы (1)


Проверьте этот JSBIN. Это поможет вам. Замените locatStr на window.location.search; Приведенный ниже код будет работать во всех сценариях.

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. Не забудьте принять ответ, если он вас устраивает

person wallop    schedule 27.09.2014
comment
Файл cookie установлен, но значение остается YYYYY. Значение файла cookie также должно быть динамическим в зависимости от того, что находится в URL-адресе. - person adrian.m123; 27.09.2014
comment
я упоминал выше, пожалуйста, измените locatStr = window.location.search. Значение — это то, что отображается в URL-адресе. - person wallop; 28.09.2014