Получить переменные массива URL в javascript / jquery - PullRequest
7 голосов
/ 11 февраля 2011

У меня есть куча параметров, передаваемых на страницу переменными URL. URL выглядит примерно так:

file.aspx? Категория [] = 1 & категория [] = 7 & категория [] = 3 & ID = 8AZ

Используя расширение jQuery getUrlParam, я могу очень легко получить переменные url, но вместо того, чтобы возвращать категорию в виде массива (что я и хочу), он возвращается как нулевой.

Есть ли способ прочитать их в массив javascript?

Ответы [ 2 ]

3 голосов
/ 11 февраля 2011

Ранее я указывал на этот вопрос: Получить значения 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 ()регулярное выражение для нахождения этого, но я не лучший эксперт по регулярным выражениям ... у кого-нибудь есть идеи?

1 голос
/ 11 февраля 2011

Не должно ли быть: file.aspx?category=1&category=7&category=3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...