Как десериализовать большую длинную строку запроса в jQuery? - PullRequest
1 голос
/ 26 февраля 2011

Я пытаюсь выяснить, как включить кнопки «назад» и «вперед» в моем приложении AJAX, которое является динамическим и управляется базой данных. Чтобы захватить состояние, я перехватываю некоторые значения для URL, типа и данных в ассоциативном массиве.

Я получаю строку хеша обратно из браузера во время события hashchange, я просто не знаю, как превратить ее обратно в ассоциативный массив из закодированной строки запроса. Кто-нибудь может помочь?

Ответы [ 4 ]

6 голосов
/ 26 февраля 2011

как то так?

var hash = 'one=1&two=2',
    split = hash.split('&');

var obj = {};
for(var i = 0; i < split.length; i++){
    var kv = split[i].split('=');
    obj[kv[0]] = decodeURIComponent(kv[1] ? kv[1].replace(/\+/g, ' ') : kv[1]);
}
console.log(obj);
2 голосов
/ 26 февраля 2011
function getQuery() {
    var query = window.location.hash.substring(1);
    var queryArray = [];
    var vars = query.split("&");
    for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split("=");
        queryArray.push([pair[0], pair[1]);
    }
    return queryArray;
}
2 голосов
/ 26 февраля 2011

jQuery имеет плагин deserialize, который может соответствовать всем требованиям.

В качестве альтернативы взгляните на этот SO-ответ , который пишет функцию jQuery для того же.

0 голосов
/ 26 февраля 2011

Спасибо, ребята. Похоже, что вызов $ .bbq.getState () делает большую часть этого для меня. Но этот метод десериализации мне понадобится позже ...

...