あなたのコードは正常に動作します、しかし、それはURLの(http://example.com/page.php?param=foo¶m=bar
のように)複数の値を割り当てられたクエリパラメータを持つと正しく動作しませんようです。さらに、クエリ文字列のパラメータ名の1つがlength
などの場合は、params
配列に悪いことがある可能性があります。別のコンテナを試してみる方が良いかもしれません。
var params = [], hash;
var q = 'example.com/index.html?param1=foo¶m2=data'.split('?')[1];
if(q != undefined){
q = q.split('&');
for(var i = 0; i < q.length; i++){
hash = q[i].split('=');
params.push(hash[1]);
params[hash[0]] = hash[1];
}
}
console.dir(params); // Array[2] 0: "foo" 1: "data" length: 2 param1: "foo" param2: "data" __proto__: Array[0]
私はあなたが簡単に十分なfor..in
ループを使用してプロパティを反復処理することができますので、params
変数は、オブジェクトで、ラインparams.push(hash[1])
を飛ばしたお勧めしたい、とパラメータの順序は、「shouldnいずれにしても問題ありません。特定の名前のパラメータに複数の値がある場合、そのパラメータの値は配列になります。たとえば、?param=foo¶m=bar
は、最終的には、{ param: ["foo", "bar"] }
として解析されます。
あなたは複数の何を意味するのですか?うまくいかないURLの例 – epascarello
@epascarello彼はexample.com/index.html?param1=foo¶m2=data –
を意味します@LeoWilsonは正しく理解しました。 –