Ранее я указывал на этот вопрос: Получить значения QueryString с помощью jQuery - но, как отметил @Crescent Fresh, эти примеры не имеют дело с массивами в строке запроса (и, кроме того, они являютсяЯ думаю, что немного медленно.
Итак, я подготовил свою версию этой функции:
function getQueryString () {
var ret = {};
var parts = (document.location.toString().split('?')[1]).split('&');
for (var i = 0; i < parts.length; i++) {
var p = parts[i].split('=');
// so strings will be correctly parsed:
p[1] = decodeURIComponent(p[1].replace(/\+/g, " "));
if (p[0].search(/\[\]/) >= 0) { // then it's an array
p[0] = p[0].replace('[]','');
if (typeof ret[p[0]] != 'object') ret[p[0]] = [];
ret[p[0]].push(p[1]);
} else {
ret[p[0]] = p[1];
}
}
return ret;
}
Но есть предостережения. Она будет работать только с правильно сформированной строкой запроса - нет обнаружения ошибокКроме того, он не работает с нумерованными / индексированными массивами ... то есть когда ваш массив определен в строке запроса как:
?category[3]=1&category[4]=7&category[20]=3&id=8az
Было бы тривиально добавить к запросу .search ()регулярное выражение для нахождения этого, но я не лучший эксперт по регулярным выражениям ... у кого-нибудь есть идеи?