17

Получение значений из параметров "GET" (JavaScript)

7

Описание проблемы

У меня есть URL с параметрами GET следующего вида:

www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5

Мне нужно получить полное значение параметра c. Когда я попытался прочитать URL, то смог получить только m2. Как мне получить все значения параметра c с помощью JavaScript?

Дополнительная информация

Я заметил, что параметр c содержит множественные значения, разделенные дефисами. Если кто-то может помочь с примером кода или объяснением, как корректно извлечь это значение, буду очень признателен!

5 ответ(ов)

2

В большинстве реализаций, которые я видел, игнорируется декодирование 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 для корректного извлечения значений, особенно если они содержат специальные символы.

2

Это простой способ проверить один параметр:

Пример 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 содержит множество параметров.

1

Вы можете использовать следующий код для извлечения аргументов из 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.

0

Вы можете получить строку запроса с помощью 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 останется пустым.

0

Я написал более простое и элегантное решение:

var arr = document.URL.match(/room=([0-9]+)/);
var room = arr ? arr[1] : null;

Эта версия добавляет проверку на то, что arr не равен null, чтобы избежать ошибок, если в URL не будет параметра room.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь