Je suis l'aide de David Dorward réponse, et a compris qu'il ne se comporte pas comme PHP ou Ruby on Rails comment ils analyser les params:
1) une variable est seulement un tableau si il se termine par []
, comme ?choice[]=1&choice[]=12
, pas quand il est ?a=1&a=2
2) lorsque plusieurs params existe avec le même nom, les plus tard remplace les précédentes, comme sur les serveurs PHP (Ruby on Rails garder la première et ignorer celles plus tard), comme ?a=1&b=2&a=3
Donc, la modification de David version, j'ai:
function QueryStringToHash(query) {
if (query == '') return null;
var hash = {};
var vars = query.split("&");
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=");
var k = decodeURIComponent(pair[0]);
var v = decodeURIComponent(pair[1]);
// If it is the first entry with this name
if (typeof hash[k] === "undefined") {
if (k.substr(k.length-2) != '[]') // not end with []. cannot use negative index as IE doesn't understand it
hash[k] = v;
else
hash[k] = [v];
// If subsequent entry with this name and not array
} else if (typeof hash[k] === "string") {
hash[k] = v; // replace it
// If subsequent entry with this name and is array
} else {
hash[k].push(v);
}
}
return hash;
};
qui est testé de manière assez complète.