Я придумал это решение, которое ведет себя как функция .Net HttpUtility.ParseQueryString
.
В результате параметры строки запроса сохраняются в свойствах в виде списков значений, так что qsObj["param"]
будетбыть так же, как звонить GetValues("param")
в .Net.
Надеюсь, вам понравится.JQuery не требуется.
var parseQueryString = function (querystring) {
var qsObj = new Object();
if (querystring) {
var parts = querystring.replace(/\?/, "").split("&");
var up = function (k, v) {
var a = qsObj[k];
if (typeof a == "undefined") {
qsObj[k] = [v];
}
else if (a instanceof Array) {
a.push(v);
}
};
for (var i in parts) {
var part = parts[i];
var kv = part.split('=');
if (kv.length == 1) {
var v = decodeURIComponent(kv[0] || "");
up(null, v);
}
else if (kv.length > 1) {
var k = decodeURIComponent(kv[0] || "");
var v = decodeURIComponent(kv[1] || "");
up(k, v);
}
}
}
return qsObj;
};
Вот как его использовать:
var qsObj = parseQueryString("a=1&a=2&&b&c=3&d=&=e&");
Для предварительного просмотра результата в консоли просто введите:
JSON.stringify(qsObj)
Вывод:
"{"a":["1","2"],"null":["","b",""],"c":["3"],"d":[""],"":["e"]}"