Ищем ...
пятница, 19 апреля 2013 г.

jQuery serialize() и unserilize() или deserialize()

Итак, возникла задача сохранять состояние отправленной формы. Первым делом определяемся с методом хранения данных - localStorage, а так же берем библиотеку jQuery.


(function($){
   $('form#filter').on('submit', function(){
       event.preventDefault();
       localStorage.setItem('filterData',$(this).serilize());
   })
   $('#getFilterData').on('click',function(){
       var s = $.unserialize(localStorage.getItem('filterData'));
       //get param=1¶m2=2
       alert('param = '+s.param+' and param2 = '+s.param2);
       //get nammed element  price%5Bl%5D=0&price%5Bu%5D=34500
       alert('Low price '+s.price.l+' and upper is'+s.price.u);
   });
 
   function parseValue(strVal) {
       return ( strVal.match(/^[0-9]+$/) ) ? parseInt(strVal) : (strVal == 'true') ? true : (strVal == 'false') ? false : strVal.replace(/[+]/g, " ")
    }

    $.unserialize = function(serializedString){
        var str = decodeURIComponent(serializedString);
 var pairs = str.split('&');
 var obj = {}, p, idx, val, match, key, val;
 for (var i=0, n=pairs.length; i < n; i++) {
     p = pairs[i].split('=');
     idx = p[0];
            if (idx.indexOf("[]") == (idx.length - 2)) {
         var ind = idx.substring(0, idx.length-2)
  if (obj[ind] === undefined) {
      obj[ind] = [];
  }
  obj[ind].push(p[1]);
     }else if (match = idx.match(/([^[]+)[([^]]+)]$/)) {
        key = match[1];
        val = match[2];
        if (!obj[key]) {
            obj[key] = {}
               }
               obj[key][val] = parseValue(p[1])
     }else {
                obj[idx] = parseValue(p[1])
     }
        }
 return obj;
    };
})

 
Вверх!