jQuery читает параметры из хэша в URL и сохраняет в объекте - PullRequest
2 голосов
/ 18 ноября 2010

Есть ли расширение jquery для получения из набора параметров:

categories[]=Shop+Mac&categories[]=Software&price_max=2799&price_min=24&sort=&page=1

объект JSON, такой как:

{
   'categories':   ["Shop Mac", "Software"],
   'price_max':    "2799",
   'price_min':    "24",
   'page':         '1'
}

...

Ответы [ 2 ]

2 голосов
/ 18 ноября 2010

Я написал функцию в этот ответ на похожий вопрос, который должен вам помочь. Я проголосовал за то, чтобы закрыть это как дубликат этого вопроса, но теперь я вижу, что в этом есть дополнительные требования. Когда я написал этот ответ, я создал версию, которая будет обрабатывать параметры URL в стиле массива:

(function () {
    var e,
        d = function (s) { return decodeURIComponent(s).replace(/\+/g, " "); },
        q = window.location.search.substring(1),
        r = /([^&=]+)=?([^&]*)/g;

    while (e = r.exec(q)) {
        if (e[1].indexOf("[") == "-1")
            urlParams[d(e[1])] = d(e[2]);
        else {
            var b1 = e[1].indexOf("["),
                aN = e[1].slice(b1+1, e[1].indexOf("]", b1)),
                pN = d(e[1].slice(0, b1));

            if (typeof urlParams[pN] != "object")
                urlParams[d(pN)] = {},
                urlParams[d(pN)].length = 0;

            if (aN)
                urlParams[d(pN)][d(aN)] = d(e[2]);
            else
                Array.prototype.push.call(urlParams[d(pN)], d(e[2]));

        }
    }
})();

Рабочее демо можно посмотреть здесь: http://jsbin.com/adali3/2

Пример строки запроса:

test=Hello&person[]=jeff&person[]=jim&person[extra]=john&nocache=1290122355841

Результат:

{
    "test": "Hello",
    "person": {
        "0": "jeff",
        "1": "jim",
        "length": 2,
        "extra": "john"
    },
    "nocache": "1290100673882"
}
1 голос
/ 18 ноября 2010

У меня есть простое решение:

// Get args from somewhere
var args = 'categories[]=Shop+Mac&categories[]=Software&price_max=2799&price_min=24&sort=&page=1';

// Set up final object
var output = {}

// Split on & to get groups of key-value pairs
args = args.split('&');

for (i = 0; i < args.length; i++) {

    // Split on = to get separate key from value 
    args[i] = args[i].split('=');

    // Remove square brackets from the key if they exist
    if (/\[\]$/.test(args[i][0])) {
        key = args[i][0].substring(0,(args[i][0].length) - 2);
    } else {
        key = args[i][0]
    }

    // If we haven't visited this key before then set it to a empty array
    if (output[key] === undefined) {
        output[key] = [];
    }

    // Push the value in to the array and remove + symbols whilst we're at it
    output[key].push(args[i][1].replace('+', ' '));

}

Если вы используете Firefox, вы можете:

// You can now use output
console.debug(output);

И вы получите:

categories: ["Shop Mac", "Software"]
page: ["1"] 
price_max: ["2799"]
price_min: ["24"]
sort: [""]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...