Открытие списка во 2-м select'e в ответ на выбор в 1-м

Yura

Новичок
Открытие списка во 2-м select'e в ответ на выбор в 1-м

Есть выпадающее меню со списком стран и выпадающее меню со списком городов. Если пользователь выбирает нужную страну, то во втором select'e должен быть список городов только этой страны. Страны и города выводятся из таблицы MYSQL. Как это реализовать, чтобы после выбора страны не перезагружалась вся страница целиком? Подскажите хотя бы с чего начать.
Я думал вытащить из базы все страны и все города, создать массив и дальше яваскриптом ...
Но, в базе больше 100 стран и в каждой стране довольно большое количество городов. Это будет долго грузиться. Т.е., нужно как-то реализовать чтение из базы только городов выбранной страны и их отображение в селекте, но чтобы вся страница не перегружалась.
 

Yura

Новичок
Автор оригинала: Mr_Max
Ajax
Пытался взять за основу http://www.dhtmlgoodies.com/index.html?whichScript=ajax_chained_select.
Если все один-в-один как там, то работает нормально. Но, мне нужно, чтобы данные читались из базы данных. Я меняю содержимое getCities.php. Пишу там запрос к базе. Не работает. Из базы данные читаются нормально, что происходит дальше - понять не могу. Вот чего в файле getCities.php было (то, что работает):
<?php

if(isset($_GET['countryCode'])){

switch($_GET['countryCode']){

case "no":
echo "obj.options[obj.options.length] = new Option('Bergen','1');\n";
echo "obj.options[obj.options.length] = new Option('Haugesund','2');\n";
echo "obj.options[obj.options.length] = new Option('Oslo','3');\n";
echo "obj.options[obj.options.length] = new Option('Stavanger','4');\n";

break;
case "dk":

echo "obj.options[obj.options.length] = new Option('Aalborg','11');\n";
echo "obj.options[obj.options.length] = new Option('Copenhagen','12');\n";
echo "obj.options[obj.options.length] = new Option('Odense','13');\n";

break;
case "us":

echo "obj.options[obj.options.length] = new Option('Atlanta','21');\n";
echo "obj.options[obj.options.length] = new Option('Chicago','22');\n";
echo "obj.options[obj.options.length] = new Option('Denver','23');\n";
echo "obj.options[obj.options.length] = new Option('Los Angeles','24');\n";
echo "obj.options[obj.options.length] = new Option('New York','25');\n";
echo "obj.options[obj.options.length] = new Option('San Fransisco','26');\n";
echo "obj.options[obj.options.length] = new Option('Seattle','27');\n";

break;
}
}

?>



Вот на что я все это заменяю:

<?

require_once "../config.php";


if(isset($_GET['countryCode'])){

$resultCity = mysql_query("SELECT * FROM ".prefix."region WHERE id_parent=".$_GET['countryCode']);

for ($j=0; $j<mysql_num_rows($resultCity); $j++)
{
$rowCity = mysql_fetch_array($resultCity);
$reg_name = $rowCity['reg_name'];
$reg_id = $rowCity['reg_id'];
echo "obj.options[obj.options.length] = new Option('".$reg_name."','".$reg_id."');\n";

}

}

?>



Где может быть ошибка?
 

Yura

Новичок
Автор оригинала: filipchuk
тебе уже сказали выше
А я что использую? Скачал скрипт по ссылке: "Download AJAX chained select".
В файле, где форма с селектом:

<script type="text/javascript" src="ajax.js"></script>
<script type="text/javascript">
var ajax = new sack();

function getCityList(sel)
{
var countryCode = sel.options[sel.selectedIndex].value;
document.getElementById('dhtmlgoodies_city').options.length = 0; // Empty city select box
if(countryCode.length>0){
ajax.requestFile = 'getCities.php?countryCode='+countryCode; // Specifying which file to get
ajax.onCompletion = createCities; // Specify function that will be executed after file has been found
ajax.runAJAX(); // Execute AJAX function
}
}

function createCities()
{
var obj = document.getElementById('dhtmlgoodies_city');
eval(ajax.response); // Executing the response from Ajax as Javascript code
}


</script>



Если использовать все один-в-один как в этом файле, то все работает как мне надо. А как прикрутить туда базу данных. Я привел скрипт. Что в нем не так? Как нужно? Я искал, не нашел, и сам не могу сообразить как это сделать, с ajax раньше никогда не сталкивался
 

filipchuk

Новичок
почитай хорошо про технологию, попробуй сделать самое елементарное, немного практики - и все получиться :). а то ухватился сразу за какой-то пример, а отладить не можеш, а за тебя это никто делать не будет
 

algo

To the stars!
Вообще, есть движок для форм HTML_QuickForm в PEAR. Он умеет делать такое, hierselect называется.

Может, пригодится =)
 
Сверху