カテゴリー
JavaScript

Javascriptでクエリーを取得する関数 getQueryStrings

location.URLなどから取得するのではなく、例えば下記ページのような事を行う関数。

javascriptでURLクエリで、変数を受け取ることはできないでしょうか?
http://q.hatena.ne.jp/1179844292

<script src="sample.js?key1=value1&key2=value2"></script>

などでクエリー(Javascriptではそう呼ばない??)を取得する。
注意点としては日本語等マルチバイトの文字をvalueにセットするには、URLエンコードしないとだめかも。
(呼び出し元のHTMLがUTF-8だとうまくいったけど。。。)

var getQueryStrings = function (){

    // scriptタグからリクエストされたURIを取得し、クエリー(?以降の部分)を抜き出す
    var script = document.getElementsByTagName( 'script' );
    var request = script[script.length-1].src;
    var query =( request.match(/\?(.+)$/) )[1]; //配列に代入されるため[1]の要素を代入

    //
    var pairs = query.split(/&/);
    var form={};
    for (var i in pairs){
        var val = pairs[i].split(/=/);
        form[decodeURI(val[0])] = decodeURI(val[1]);
    }
return form;
};

使い方は
var form = getQueryStrings();
とするとform にハッシュとして代入される。

form["key1"]やform["key2"]のように。
だいたい form.key1 form.key2 でも大丈夫だと思うけど、key1が数字の場合うまくいかないので注意。
例)sample.js?1=val1&2=val2

なんでこんな事するのかというと、以前はCGIでJavascriptを書き出していたので perl.cgi?k=aaa&〜 と、していた。そのスクリプトをJavascriptとして置き換えるのにURIの変更を(ほぼ)せずに行いたかったので。
こうしないとパラメーターを渡すのにscriptタグの変更が必要なので。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください