-
-
Save kares/956897 to your computer and use it in GitHub Desktop.
/** | |
* $.parseParams - parse query string paramaters into an object. | |
*/ | |
(function($) { | |
var re = /([^&=]+)=?([^&]*)/g; | |
var decodeRE = /\+/g; // Regex for replacing addition symbol with a space | |
var decode = function (str) {return decodeURIComponent( str.replace(decodeRE, " ") );}; | |
$.parseParams = function(query) { | |
var params = {}, e; | |
while ( e = re.exec(query) ) { | |
var k = decode( e[1] ), v = decode( e[2] ); | |
if (k.substring(k.length - 2) === '[]') { | |
k = k.substring(0, k.length - 2); | |
(params[k] || (params[k] = [])).push(v); | |
} | |
else params[k] = v; | |
} | |
return params; | |
}; | |
})(jQuery); |
$.parseParams('http://mysite.com/?form[name]=test'); // form[0].NaN = test
If this is used this in a project, do you have any licence or attribution requirements?
@DimitryPHP have you solved that?
Thanks Kares, it helps.
Using this to fake up a $.serializeObject() for want of one. There are serializeObject() implements, but the first code example here is small and easily pasted in-line.
$('#create_account_form').on('submit', function(event) {
event.preventDefault();
$.ajax({
'url': '/account/create',
'method':'post',
'data': $.parseParams( $('#create_account_form').serialize() ),
Thanks!
Yeah, the upgraded version doesn't work for me at all. Firstly it requires a leading "?" and I just get data[Nan]: "1". The original was better.
Solved data[NaN] problem, change line 51 from
params[key][parseInt(index)] = value;
To
params[key][index] = value;
dont work with more complex url, example:
https://gist.github.com/kares/956897?var[1]=0&var[2]=9&var[3][d]=f
Returns:
{
"var" : {
0 : "0" ,
1 : "9",
3 : "f"
}
}
Please check this function:
https://github.com/kvz/phpjs/blob/master/functions/strings/parse_str.js
There is a larger debate going on here - http://stackoverflow.com/q/1131630/104380
one line deParams :)
function deParams(str) {
return (str || document.location.search).replace(/(^\?)/,'').split("&").map(function(n){return n = n.split("="),this[n[0]] = n[1],this}.bind({}))[0];
}
PHPstorm inspection says this part is not quite ideal:
while ( e = re.exec(query) ) {
instead, it is better to use this:
while ((e = re.exec(query)) !== null) {
Same example in mozilla developer page: RegExp.prototype.exec()
A jQuery plugin https://github.com/AceMetrix/jquery-deparam
And also, a function that converts object to URL is handy :-)
Fiddle: http://jsfiddle.net/cADUU/4/