2016-12-20 19 views
0

JavaScriptコードで検索するためのクエリパラメータを取得するには、以下のコードを使用しています。これが複数のパラメータを処理できないという特別な理由はありますか?私はそれを実装するのに問題があるようです。2つのクエリ文字列パラメータの取得

var params = [], hash; 
var q = document.URL.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]; 
    } 
} 
+0

あなたは複数の何を意味するのですか?うまくいかないURLの例 – epascarello

+0

@epascarello彼はexample.com/index.html?param1=foo¶m2=data –

+0

を意味します@LeoWilsonは正しく理解しました。 –

答えて

1

潜在的に正規表現を使用してパラメータを取得できます。

var test = 'example.com/index.html?param1=foo&param2=data#icouldhaveahashtoo'; 
 
var params = {}; 
 

 
test.replace(/[?&]([^=]+)[=]([^&#]+)/g, function(match, key, value){ 
 
    params[key] = value; 
 
    return ''; 
 
}); 
 

 
console.log(params);

+0

テストの値w/document.URLを置き換えれば、これは完璧な解決策になります。 –

+0

@LeoWilson私はそれをして、これは完全に働いた。本当にありがとう! –

+0

義務xkcd:https://xkcd.com/1171/ – Hatchet

-1

あなたのコードは正常に動作します、しかし、それはURLの(http://example.com/page.php?param=foo&param=barのように)複数の値を割り当てられたクエリパラメータを持つと正しく動作しませんようです。さらに、クエリ文字列のパラメータ名の1つがlengthなどの場合は、params配列に悪いことがある可能性があります。別のコンテナを試してみる方が良いかもしれません。

var params = [], hash; 
var q = 'example.com/index.html?param1=foo&param2=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&param=barは、最終的には、{ param: ["foo", "bar"] }として解析されます。

+0

いくつか改善を提案できますか? –

+0

@SteveHallaあなたは、コードの実装に問題があると言いました。あなたがもっと詳細に行くことができれば助けになるでしょう。さもなければ、われわれは皆ストローで握っています。 – Hatchet

+0

@SteveHalla編集を参照してください。 – Hatchet

関連する問題