URLに付加した引数を処理する。

URLの最後の方に「?xxx=yyy」みたいなのが付いてるのを
見たことがあると思う。

例えばhttp://www.google.co.jp/searchというページがあって、
その末尾に「?」、さらに続けて「q=test」と付ければ
「変数qの中身は文字列test」と言った情報を付加してることになる。
http://www.google.co.jp/search?q=test
さらにその情報は複数に設定することもできる。
http://xyzt.jugem.jp/?xxx=yyy&zzz=ttt区切りとして&を使う。

で、その「?xxx=yyy」のことをなんと呼ぶのかと調べて
ると、クエリと呼ぶんだそうだ。

cgiプログラムではクエリを度々扱うんだそうだ。
が、普通のhtmlファイルだと、ただの意味不明な文字列だと
して無視される。さ、ここでJavaScriptですね。

http://xyzt.jugem.jp/?xxx=yyy&zzz=tttにアクセスしたとき、
変数xxxがあって、その値はyyy。
変数zzzがあって、その値はtttと処理するプログラムを作りたい。


まず私が思いついた戦略としてはdocument.URLを使うもの。 今見ているwebページのURLアドレスが取得できるのだが、実際は ブラウザのアドレスバー(url欄)に書いてある文字列を参照することができる。 つまり、いくらhttp://xxx.example.com/test.htmlであっても、ブラウザのアドレスバーに http://xxx.example.com/test.html?q=3と書いてあればそっちを取得できる。 だから、document.URLが?を含むかをString.indexOf()で判断して、含むなら String.substring()で?以降を削りだし、String.split()を乱用して、 まず&で区切り、次に=で区切る、という方法で当然できる。
さて、この記事を初めて書いた頃から約一年経った。で、こういうものを知った。 location.searchこれで、いきなりクエリが取得されるのだ。 http://xxx.example.com/test.htmlの時、location.searchは(クエリが無い時は)空白の文字列。 http://xxx.example.com/test.html?q=3&t=mailの時、location.search=="?q=3&t=mail"。 ?が入ってしまう。 しかし、document.URLから?以降を削りだすよりはずっと楽だろう。 <script language="JavaScript" type="text/javascript"><!-- document.open(); var tmp=location.search; if(tmp!=""){ document.write("<fieldset><legend>クエリ取得のテスト</legend>"); tmp=tmp.substring(1,tmp.length); var tmp2=tmp.split("&"); for(i in tmp2){ var 変数=tmp2[i].split("=")[0]; var 値=tmp2[i].split("=")[1]; document.write("変数:"+変数+" 値:"+値+"<br />"); } document.write("</fieldset>"); } document.close(); //--></script> (ちなみに変数の名前に「変数」とか「値」とかありますが、ちゃんとこれで動きます。詳しくは「2byte変数って」で) 実はこのページにもこのスクリプトを埋めています。 是非試してくださいな。 試験ページ:?a=1&s=hello

2009/01/24 修正
2008/05/24 完成
cd ../ 戻る