jQuery has a useful function to serialize an object into url query string, which called $.param().
For example:
$.param({ a: 2, b: 3, c: 4 }) // "a=2&b=3&c=4" $.param({ a: [2, 3, 4] }) // "a=2&a=3&a=4"
Sometimes we want do the opposite thing: we want to convert the url query string into an object. This process can be called deserialize the url query string. Unfortunately, I didn'’t find any method in jQuery to achive this, so I had to write my own one.
I named this function as “deserializeUrlParams()” and encapsulated it into zizhujy.com namespace. The code lists as below:
var zizhujy = {}; zizhujy.com = { // // let object refer to value // Usage: object = zizhujy.com.set(object, value); // set: function (object, value) { if (object == null) { object = value; } else { if (object instanceof Array) { object.push(value); } else { var o = object; object = []; object.push(o); object.push(value); } } return object; }, // // Usage: zizhujy.com.deserializeUrlParams("a=2&b=3") --> {a:2, b:3} // zizhujy.com.deserializeUrlParams("a=2&a=3&a=4") --> {a: [2, 3, 4]} // zizhujy.com.deserializeUrlParams() <==> deserializeUrlParams(window.location.search.substring(1)) // deserializeUrlParams: function () { var urlParams = null; var expression; // Regex for replacing addition symbol with a space var a = /\+/g; var reg = /([^&=]+)=?([^&]*)/g; var d = function (s) { return decodeURIComponent(s.replace(a, " ")); }; var q = ""; if (arguments.length > 0) q = arguments[0]; else q = window.location.search.substring(1); while (expression = reg.exec(q)) { if (urlParams == null) urlParams = {}; urlParams[d(expression[1])] = this.set(urlParams[d(expression[1])], d(expression[2])); } return urlParams; } };
You can test it out by here.