Javascriptでクエリーを取得する関数 getQueryStrings
- 2010.02.06
- JavaScript
- JavaScript
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タグの変更が必要なので。
-
前の記事
ディスクへのよけいな書き込みを排除し、速度を上げる 2010.02.04
-
次の記事
Webサービスを公開し、運用するために を読んで 2010.03.06