Как я могу получить значения строки запроса в JavaScript?
Некоторые из опубликованных ecmascript здесь решений неэффективны. Повторять plugins поиск по регулярному выражению plugin каждый раз, когда скрипту vanilla-js требуется доступ к параметру, совершенно plugins не нужно, достаточно одной javascript-dom единственной функции для query-string разделения параметров на js объект стиля ассоциативного plugin массива. Если вы не работаете vanilla-js с API истории HTML 5, это url необходимо только один раз js при загрузке страницы. Другие urls предложения здесь также не query-string могут правильно декодировать javascript-execution URL.
var urlParams;
(window.onpopstate = function () {
var match,
pl = /\+/g, // Regex for replacing addition symbol with a space
search = /([^&=]+)=?([^&]*)/g,
decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); },
query = window.location.search.substring(1);
urlParams = {};
while (match = search.exec(query))
urlParams[decode(match[1])] = decode(match[2]);
})();
Пример строки запроса:
?i=main&mode=front&sid=de8d49b78a85a322c4155015fdce22c4&enc=+Hello%20&empty
Результат:
urlParams = {
enc: " Hello ",
i: "main",
mode: "front",
sid: "de8d49b78a85a322c4155015fdce22c4",
empty: ""
}
alert(urlParams["mode"]);
// -> "front"
alert("empty" in urlParams);
// -> true
Это query-string можно легко улучшить для plugins обработки строк запроса в vanilla-js стиле массива. Примером этого vanilla-javascript является here, но поскольку параметры plugin стиля массива не определены url в RFC 3986, я не буду засорять этот javascript-execution ответ исходным кодом. For those interested in a "polluted" version, look at campbeln's answer below.
Кроме javascript-library того, как указано в комментариях, ;
является plugins допустимым разделителем для url пар key=value
. Потребовалось бы более urls сложное регулярное выражение vanillajs для обработки ;
или &
, что, я query-string думаю, не нужно, потому что javascript-dom ;
используется редко, и я javascript-execution бы сказал, что даже маловероятно, что url будут использоваться оба. Если js вам нужно поддерживать ;
вместо urls &
, просто поменяйте их местами vanilla-js в регулярном выражении.
Если вы используете язык предварительной обработки на стороне сервера, вы можете использовать его собственные функции JSON, чтобы сделать за вас тяжелую работу. Например, в PHP вы можете написать:
Намного javascript-library проще!
ОБНОВЛЕНО
Новой возможностью js будет получение повторяющихся javascript параметров, как показано javascript-library ниже
myparam=1&myparam=2
. спецификации не существует, однако vanilla-js большинство текущих подходов javascript следуют за созданием массива.
myparam = ["1", "2"]
Итак, вот javascript способ управления этим:
let urlParams = {};
(window.onpopstate = function () {
let match,
pl = /\+/g, // Regex for replacing addition symbol with a space
search = /([^&=]+)=?([^&]*)/g,
decode = function (s) {
return decodeURIComponent(s.replace(pl, " "));
},
query = window.location.search.substring(1);
while (match = search.exec(query)) {
if (decode(match[1]) in urlParams) {
if (!Array.isArray(urlParams[decode(match[1])])) {
urlParams[decode(match[1])] = [urlParams[decode(match[1])]];
}
urlParams[decode(match[1])].push(decode(match[2]));
} else {
urlParams[decode(match[1])] = decode(match[2]);
}
}
})();
javascript
url
plugins
query-string
Как я могу получить значения строки запроса в JavaScript?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.