Javascript Deparam - decode querystring
Opposite of $.param. Sparked by SO discussion: http://stackoverflow.com/questions/2090551/parse-query-string-in-javascript
by Thomas Orthbandt
HTML
<pre id="output"></pre>
JavaScript
deparam = (function(d,x,params,pair,i) {
return function (qs) {
// start bucket; can't cheat by setting it in scope declaration or it overwrites
params = {};
// remove preceding non-querystring, correct spaces, and split
qs = qs.substring(qs.indexOf('?')+1).replace(x,' ').split('&');
// march and parse
for (i = qs.length; i > 0;) {
pair = qs[--i].split('=');
params[d(pair[0])] = d(pair[1]);
}
return params;
};//-- fn deparam
})(decodeURIComponent);
var tests = {};
tests["simple params"] = "ID=2&first=1&second=b";
tests["full url"] = "http://blah.com/?third=c&fourth=d&fifth=e";
tests['just ?'] = '?animal=bear&fruit=apple&building=Empire State Building&spaces=these+are+pluses';
var $output = document.getElementById('output');
function output(msg) {
$output.innerHTML += "\n" + Array.prototype.slice.call(arguments, 0).join("\n");
}
var results = {}; // save results, so we can confirm we're not incorrectly referencing
$.each(tests, function(msg, test) {
var q = deparam(test);
results[msg] = q;
output(msg, test, JSON.stringify(q), $.param(q));
output('-------------------');
});
output('=== confirming results non-overwrite ===');
$.each(results, function(msg, result) {
output(msg, JSON.stringify(result));
output('-------------------');
});