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 ../ 戻る