Indexへ戻る
サンプル(2)AjaxとPHP

  サンプル(2)ではフォームのプルダウンで条件を選択し、CSVファイルのデータを読み込んで条件に該当する結果を表示するものです。
サンプル(2)の実行
サンプル(2)のHTML
サンプル(2)のPHP
  プルダウンの可変セレクトメニューの部分は、select タグ自体を差し替えると実態がないので onChange が無効になってしまいます。このため、PHPからはオプションに使用するデータを取得するのみとし、Javascript側で option を作り直しています。
  2つ目のセレクトオプションの内容により、3つ目のセレクトオプションが決定するので、同期通信でリクエストを送信しています。
■Javascript
 // 検索結果画面初期表示用
function setList() {
    var 
chiku  "0";
    var 
ken    "0";

    
setKenOption(chiku);
    
setCityOption(chikuken);

    
document.form1.selChiku.selectedIndex 0;
    
document.form1.selKen.selectedIndex   0;
    
document.form1.selCity.selectedIndex  0;
}

// 地区選択時
function changeChiku(selChiku)
{
    var 
selKen  "0";
    var 
selCity "0";

    
setKenOption(selChiku.value);
    
setCityOption(selChiku.valueselKen);

    
getResult(selChiku.valueselKenselCity);
}

// 都道府県選択時
function changeKen(selChikuselKen)
{
    var 
selCity "0";

    
setCiryOption(selChiku.valueselKen.value);

    if (
selChiku.value == "0") {
        
document.form1.selKen.selectedIndex 0;
    }

    
getResult(selChiku.valueselKen.valueselCity);
}

// 市区町村選択時
function changeCity(selChikuselKenselCity)
{
    if (
selChiku.value == "0" || selKen.value == "0") {
        
document.form1.selCity.selectedIndex 0;
    }

    
getResult(selChiku.valueselKen.valueselCity.value);
}

// 都道府県オプション設定
function setKenOption(chiku)
{
    
len document.form1.selKen.options.length;
    for (
i=len-1i>=0i--){
        
document.form1.selKen.options[i] = null;
    }

    
//XMLHttpRequestオブジェクト生成
    
var xmlhttp createHttpRequest();
    if (
xmlhttp == null) {
        return 
null;
    }

    var 
data "selChiku=" chiku;

    
sendRequest(xmlhttp"POST""optionKen.php"falsedatacallBack1);

    
document.form1.selKen.selectedIndex 0;
}
function 
callBack1(xmlhttp)
{
    var 
result xmlhttp.responseText;

    var 
resArray result.split(",");
    for (
i=0i<resArray.lengthi++) {
        var 
kenArray resArray[i].split("/");

        
document.form1.selKen.options[i] =
             new 
Option(kenArray[1], kenArray[0]);
    }
}

// 市区町村オプション設定
function setCityOption(chikuken)
{
    
len document.form1.selCity.options.length;
    for (
i=len-1i>=0i--){
        
document.form1.selCity.options[i] = null;
    }

    
//XMLHttpRequestオブジェクト生成
    
var xmlhttp createHttpRequest();
    if (
xmlhttp == null) {
        return 
null;
    }

    var 
data "";
    
data += "selChiku=" chiku;
    
data += "&selKen=" ken;

    
sendRequest(xmlhttp"POST""optionKen.php"falsedatacallBack2);

    
document.form1.selCity.selectedIndex 0;
}
function 
callBack2(xmlhttp)
{
    var 
result xmlhttp.responseText;

    var 
resArray result.split(",");
    for (
i=0i<resArray.lengthi++) {
        var 
cityArray resArray[i].split("/");

        
document.form1.selCity.options[i] =
             new 
Option(cityArray[1], cityArray[0]);
    }
}

// データ検索
function getResult(chikukencity)
{
    
//XMLHttpRequestオブジェクト生成
    
var xmlhttp createHttpRequest();
    if (
xmlhttp == null) {
        return 
null;
    }

    var 
data "";
    
data += "selChiku=" chiku;
    
data += "&selKen="  ken;
    
data += "&selCity=" city;

    
sendRequest(xmlhttp"POST""result.php"falsedatacallBack);
}
function 
callBack(xmlhttp)
{
    var 
result document.getElementById("result");
    
result.innerHTML xmlhttp.responseText;
}