私の目標は、米国の州でいっぱいのドロップダウンメニューを作成することです。州を選択すると、2番目のドロップダウンメニューにその州の都市が表示されます。データベースにすべての都市を保存することを検討していないため、すべての州の都市の配列を保存するlist-of-cities.phpというPHPファイルがあります。
次のコードはJSとHTMLであり、XMLHTTPREQUESTオブジェクトがlist-of-cities.phpとドロップダウンフォームから情報を要求するようにします。関数AddToOptionsList()は、XMLHTTPREQUESTオブジェクトのresponseText(list-of-cities.phpの配列からの都市)から受け取った値を「cities」ドロップダウンメニューに追加します。
function PopulateCities() {
var statesList = document.frmMain.states;
var stateValue = statesList[statesList.selectedIndex].value;
var i = 0;
do {
//create new XMLHTTPRequest object
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 )
{
var responseText = xmlhttp.responseText;
if( responseText == null){
//the request sent a null value from the cities array therefore we reached the end of it
break;
} else{
//Add the value received from the response to the "cities" option list
AddToOptionList(document.frmMain.cities, i, responseText);
}
}
}
xmlhttp.open("GET","http://localhost//wp-content/themes/list-of-cities.php?q="i+stateValue,false);
xmlhttp.send();
i++;
}
while(true);
}
function AddToOptionList(OptionList, OptionValue, OptionText) {
// Add option to the bottom of the list
OptionList[OptionList.length] = new Option(OptionText, OptionValue);
}
<form name="frmMain">
<div id="choose_state">
Select a state from the drop down menu:<select name="states" onChange="PopulateCities();">
<option value="choose_state" selected="selected">Choose a state</option>
<option value="florida">Florida</option>
<option value="newyork">New York</option>
<option value="california">Callifornia</option>
<option value="northcarolina">North Carolina</option>
</select>
</div><!--choose_state -->
<select name="cities" >
<option> Choose a city</option>
</select>
</form>
以下は、テスト目的で現在フロリダの都市の配列のみを持っているlist-of-cities.phpコードです。XMLHTTPREQUESTオブジェクトから渡される$qパラメーターは、citys配列内の位置を追跡するために、「i+statename」の形式になっています。
<?php
$florida[]="Gainesville";
$florida[]="Miami";
$florida[]="Tampa";
$florida[]="Orlando";
$florida[]="Jacksonville";
$florida[]="Melbourne";
$florida[]="Tallahassee";
//$newyork[] = "Manhattan";
//$newyork[] = "Brooklynn";
//$newyork[] = "Queens";
//get the q parameter from URL (i + State name)
$q=$_GET["q"];
$i = substr($q,0,1); //first char of $q contains the position in the city array
$state = substr($q, 1, strlen($q)-1); //gives the state name from $q
if( $state == "florida" ) {
echo $florida[$i];
}
現在、このコードはすべて、ドロップダウンメニューに$florida[]配列の7つの都市すべてを入力する際に機能します。ただし、現在、citys配列からnull値が正しく機能していないのを待って、while()ループを終了しようとしています。そのため、JSコードで$ florida []配列のサイズを特定して、 while()ループを終了し、ドロップダウンメニューへの入力を停止できます。
ヘルプやヒントは大歓迎です!