Получение значений из параметров "GET" (JavaScript)
Описание проблемы
У меня есть URL с параметрами GET следующего вида:
www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5
Мне нужно получить полное значение параметра c
. Когда я попытался прочитать URL, то смог получить только m2
. Как мне получить все значения параметра c
с помощью JavaScript?
Дополнительная информация
Я заметил, что параметр c
содержит множественные значения, разделенные дефисами. Если кто-то может помочь с примером кода или объяснением, как корректно извлечь это значение, буду очень признателен!
5 ответ(ов)
В большинстве реализаций, которые я видел, игнорируется декодирование URL для имен и значений параметров.
Вот универсальная функция, которая также выполняет корректное декодирование URL:
function getQueryParams(qs) {
qs = qs.split('+').join(' '); // Заменяем '+' на пробел
var params = {},
tokens,
re = /[?&]?([^=]+)=([^&]*)/g; // Регулярное выражение для извлечения параметров
while (tokens = re.exec(qs)) {
// Декодируем имена и значения параметров
params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
}
return params;
}
// Пример использования
// var query = getQueryParams(document.location.search);
// alert(query.foo);
Эта функция принимает строку запроса и возвращает объект с параметрами, где ключами являются имена параметров, а значениями — их декодированные значения. Не забудьте использовать decodeURIComponent
для корректного извлечения значений, особенно если они содержат специальные символы.
Это простой способ проверить один параметр:
Пример URL:
http://myserver/action?myParam=2
Пример Javascript:
var myParam = location.search.split('myParam=')[1];
Если "myParam" существует в URL, то переменная myParam будет содержать "2"; в противном случае она будет равна undefined.
Если вам нужно указать значение по умолчанию, вы можете сделать это следующим образом:
var myParam = location.search.split('myParam=')[1] ? location.search.split('myParam=')[1] : 'myDefaultValue';
Обновление: Этот способ работает лучше:
var url = "http://www.example.com/index.php?myParam=384&login=admin"; // можно использовать window.location.href для текущего URL
var captured = /myParam=([^&]+)/.exec(url)[1]; // Значение в [1] ('384' в нашем случае)
var result = captured ? captured : 'myDefaultValue';
Этот метод корректно работает даже когда URL содержит множество параметров.
Вы можете использовать следующий код для извлечения аргументов из URL. Это довольно просто:
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,
function(m, key, value) {
vars[key] = value;
});
return vars;
}
Затем вы можете вызвать эту функцию следующим образом:
var fType = getUrlVars()["type"];
Таким образом, переменная fType
будет содержать значение параметра type
из текущего URL.
Вы можете получить строку запроса с помощью location.search
, затем разделить все, что идет после вопросительного знака:
var params = {};
if (location.search) {
var parts = location.search.substring(1).split('&');
for (var i = 0; i < parts.length; i++) {
var nv = parts[i].split('=');
if (!nv[0]) continue;
params[nv[0]] = nv[1] || true;
}
}
// Теперь вы можете получить нужные параметры таким образом:
var abc = params.abc;
Таким образом, этот код извлекает все параметры из URL и сохраняет их в объекте params
. Если параметр не имеет значения, он установит его в true
. Обратите внимание, что в случае, если параметров в строке запроса нет, объект params
останется пустым.
Я написал более простое и элегантное решение:
var arr = document.URL.match(/room=([0-9]+)/);
var room = arr ? arr[1] : null;
Эта версия добавляет проверку на то, что arr
не равен null
, чтобы избежать ошибок, если в URL не будет параметра room
.
Кодирование URL в JavaScript
Как получить текущий URL с помощью JavaScript?
Как изменить URL без перезагрузки страницы?
React-router URLs не работают при обновлении страницы или ручном вводе адреса
Как создать диалог с кнопками "Ок" и "Отмена"