Получить значения строк запроса для повторяющихся переменных GET

Я видел, как разбирать информацию строки запроса (переменные GET) с помощью Javascript и jQuery. Здесь есть два разных примера (я всегда предпочитал второй):

Как получить значения строки запроса в JavaScript?

jquery get querystring из URL

Проблема в том, что у меня есть строка запроса, в которой есть две одинаковые переменные GET (оба они называются "поиск"). Когда я запускаю функцию из первого ответа, она возвращает только первый экземпляр переменной "поиск" GET, а второй ответ возвращает только последнюю переменную GET "поиск". Пример строки запроса:

http://www.example.com?search=this&search=that

Я сделал некоторые поиски и там был ответ в этой теме, который, похоже, имеет дело с проблемой:

https://gist.github.com/kares/956897

Но я точно не знаю, как его реализовать так, как написано. Я в основном ищу функцию, которая может анализировать строку запроса и возвращать все (если есть) значения, которые соответствуют конкретной переменной GET (в данном случае "поиск"; в приведенном выше примере она вернет "это" и "это",).

Спасибо за вашу помощь!

2 ответа

Это должно сделать трюк:

var params = location.search.substr(1).split('&'),
 results = {};

for(var i = 0; i < params.length; i++)
{
 var temp = params[i].split('='),
 key = temp[0],
 val = temp[1];

 results[key] = results[key] || [];
 results[key].push(val);
}

console.log(results); // { search: ["a", "b"] }


//Прочитайте страницу GET URL-переменные и верните их как ассоциативный массив.

function getUrlVars()
{
 var vars = [], hash;
 var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
 for(var i = 0; i < hashes.length; i++)
 {
 hash = hashes[i].split('=');
 if(typeof vars[hash[0]]=='undefined'){
 vars.push(hash[0]);
 vars[hash[0]] = [hash[1]];
 }else{
 vars[hash[0]].push(hash[1]);
 }
 }
 return vars;
}

Вы можете найти демо-версию здесь

licensed under cc by-sa 3.0 with attribution.