Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.04.2013, 16:12
Профессор
Посмотреть профиль Найти все сообщения от Антон Крамолов
 
Регистрация: 11.04.2012
Сообщений: 255

Парсинг querystring
var queryString = new (function() { 
    function parseParam(name, value, params) {
        var pos = name.indexOf('['),
            parts = [];
            
        if (pos == 0) {
            return;
        }
        else if (pos == -1) {
            parts[0] = name;
        }
        else {
            parts[0] = name.substr(0, pos);
            var temp = name.substr(++pos).split('][');
            var i = temp.length - 1;
            temp[i] = temp[i].split(']')[0];
            parts.concat(temp);
        }

        var part,
            cur = params,
            i = 0,
            len = parts.length;

        while (1) {
            part = parts[i];

            if (part == '') {
                var numKeys = Object.keys(cur).filter(function(a) { return a % 1; });
                part = numKeys.length ? Math.max.apply(null, numKeys) + 1 : 0;
            }

            if (++i == len) {
                break;
            }

            if (cur[part] === undefined) {
                cur[part] = {};    
            }                  

            cur = cur[part];
        }

        cur[part] = decodeURIComponent(value);
    }
    
    this.parse = function(str, sep, eq) {
        eq = eq || '=';
        var parts = str.split(sep || '&'),
            i = 0,
            len = parts.length, 
            obj = {};

        while (i < len) {
            var part = parts[i++].split(eq);
            parseParam(part[0], part[1], obj);
        }

        return obj;
    }
    
    function completeParams(params, obj, parts) {       
        for (var i in obj) {                
            if (typeof obj[i] == 'object') {
                parts.push(i);
                completeParams(params, obj[i], parts);
                parts.pop();
                continue;
            }
            
            var temp = parts.concat(i);
            params.push([ temp[0] + ( temp.length > 1 ? '[' + temp.slice(1).join('][') + ']' : '' ), obj[i] ]);
        }
    }
    
    this.stringify = function(obj, sep, eq) {
        sep = sep || '&';
        eq = eq || '=';
        var params = [];
        completeParams(params, obj, []);
        var i = 0, 
            len = params.length, 
            out = '';
        
        while (1) {
            out += params[i][0] + eq + encodeURIComponent(params[i][1]);
            
            if (++i == len) {
                break;
            }
            
            out += sep;
        }
        
        return out;
    }
})();

// Пример: парсим cookies
// queryString.parse(document.cookie, /;\s*/)


Вот я написал что-то типа прототипа, работает как надо, но:
1) я не имею представления как обрабатывать неправильные имена параметров a[][]b, a[ и т.д.
2) как переписать этот фрагмент
if (part == '') {
                var numKeys = Object.keys(cur).filter(function(a) { return a % 1; });
                part = numKeys.length ? Math.max.apply(null, numKeys) + 1 : 0;
            }


он неоптимальный, вроде как пох разбор на стороне клиента, но все же. Есть ли у объектов какой уникальный идентефикатор. Нужно как то сохранять максимальное значение числового индекса
Ответить с цитированием
  #2 (permalink)  
Старый 11.04.2013, 17:12
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Антон Крамолов
queryString.parse(document.cookie, /;\s*/)
Какая связь между queryString и cookie ?
Ответить с цитированием
  #3 (permalink)  
Старый 12.04.2013, 19:03
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от qwerty-клавиатура
 
Регистрация: 12.04.2013
Сообщений: 132

формат <разделитель><ключ><равно><з кодированное_значение>
Ответить с цитированием
  #4 (permalink)  
Старый 12.04.2013, 22:49
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от qwerty-клавиатура
 
Регистрация: 12.04.2013
Сообщений: 132

http://x9a.ru/js/querystring.js
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг даты Allan Stark Общие вопросы Javascript 4 30.01.2014 18:57
Парсинг страницы с авторизацией aspx karmis Серверные языки и технологии 0 21.02.2012 18:28
парсинг тегов, как userjs xhugo Общие вопросы Javascript 7 11.05.2011 19:38
Парсинг большого кол-ва хтмл zeloras Общие вопросы Javascript 1 15.03.2011 19:04
Парсинг данных alk0v Events/DOM/Window 12 11.09.2009 10:35