これらを実現するには、簡単な方法は、都道府県や部を選択された後で、一旦 submit してしまってから、サーバサイドでデータベースを検索して市町村や課の一覧をブラウザに送り返す方法があります。
これは簡単で確実ですが、用途によっては、このような submit による方法では、ページ遷移を伴うこともあり、これをやりたくない場合があるかもしれません。
ここでは、これらを解決するために考えられる方法を示し、その内のいくつかはサンプルも示します。
これは、日本全国の都道府県はもちろん、日本全国の市町村もすべて、一旦、クライアントサイドにダウンロードさせることになります。
データの種別によっては、大きな容量をダウンロードさせることになり、時間がかかりますが、一旦ダウンロードできてしまえば、その後のアクセスにはサーバサイドへのアクセスが不要なため、ダウンロード後の動作は素早くなります。 なお、クライアントサイドの JavaScript の配列として持たせることにより、再利用を可能にしています。
サーバサイドで管理しているデータをクライアントサイドに一括して送出するサンプル
クライアントサイドのみ(上記が生成するスクリプトの結果)のサンプル
都道府県や部が選ばれるごとにサーバサイドにその都道府県や部に含まれる市町村や課の一覧を取得しに行きます。
フレームを2つ使い、その内のひとつを submit 用の隠しフレームとして使います。フレームに伴う複雑さは多少ありますが、フレームをサポートしているブラウザならば、ブラウザを問わずに使えるという利点があります。
HTML FRAME を使い、サーバサイドとクライアントサイドがやりとりするサンプル(配列をデータベースとして使用)
HTML FRAME を使い、サーバサイドとクライアントサイドがやりとりするサンプル(DBMS(Jet) を使用)
ページに埋め込める部品を利用することになります。
Java には標準で HTTP 用のクラスが付属していますので、HTTP で通信する Java Applet を作るのは比較的簡単です。Java Applet ならば、ブラウザがセキュリティの警告も出すこともなく、大抵のブラウザで動くという利点があります。ただ、Java Applet の作成が面倒であったり、ブラウザによっては Java Applet の起動が遅かったり、などのデメリットもあります。
また、ActiveX Control を自前で作った場合、IE でのみ動くことになります。またこれを使う際にはブラウザがセキュリティに関する警告を出すため、これを回避する方法が面倒です。ActiveX Control に証明書を組み込む必要がありますが、これ自体も手間がかかるでしょう。
リモートスクリプトは、サーバサイドとクライアントサイドとの間で密接にデータのやりとりができます。なお、リモートスクリプトのクライアントサイドは Java Applet として実装されているので、クライアントサイドから見た場合 Java にまつわる利点・欠点がそのままあります。
IE のバージョン 4 以上には、データコントロール(Tabular Data Control(TDC)) の機能があります。 これを使ってフレームを使うやり方と同様に、このコントロール内で submit できるため、ページの遷移が発生しません。 しかし、この機能は IE 以外の Netscape Navigator などのブラウザには備わっていませんので、IE 専用のやり方になります。 TDC は ActiveX Control ですが、ブラウザに標準で組み込まれているコントロールであり、すでに証明書も持っているため、セキュリティに関する問題はありません。
IE の TDC を使い、サーバサイドとクライアントサイドがやりとりするサンプル