Дано:
Форма, которая предназначена для навигации в каталоге предприятий. Форма содержит 4 элемента select: regId, cityId, catId, subCatId (регион, город, категория, подкатегория)
Каждый элемент вызывает работу функции по событию onClick: goReg(), goCity(), goCat(), goSubCat();
Функция формирует переменную URL с GET параметрами, передает значение в php файл, получает ответ и выводит результат в дочерний элемент select (первый элемент select regId - сформирован сразу, остальные select - пустые значения)
Я хочу обрабатывать все запросы в одном php файле и одной JS функцией, которая в зависимости от вызывающей функции формирует на странице select и другие элементы (div, span и т.д.).
Первая этап проходит отлично, первый select (regId) формирует второй (cityId). Но второй select (cityId) не вызывает никакого действия, я думаю, что это из-за путаницы с переменной fName в файле ajax.js (глобальная, локальная)
Ниже я привожу код всех трех файлов, которые участвуют в процессе, всего это около 300 строк, я не стал ничего резать, так как может кто-то возьмет структуру для примера.
Меня особенно интересуют Ваши комментарии по поводу JavaScript кода. Большое спасибо за советы!
ajax_test.html
| Код | <?php //Подключаемся к базе данных include_once("../include/config.inc");
header("Content-type: text/plain; charset=windows-1251"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); $regId=@$_GET["regId"]; $cityId=@$_GET["cityId"]; $catId=@$_GET["catId"]; $subCatId=@$_GET["subCatId"];
?> <html> <head> <script language="JavaScript" src="ajax.js"></script> </head>
<body>
<br> <form name="form1" style="margin: 0px;"> <!-- навигация по каталогу : начало --> <table cellspacing="0" cellpadding="0" id="settings" bgcolor="#fafafa" border="0"> <tr> <td id="moduleTop">Навигация по каталогу</td> <td colspan="2" style="border-bottom: 1px Solid Black;background: White;"> </td> </tr> <tr> <td id="moduleBaseL">Регион:</td> <td id="moduleBaseR" colspan="2"> <select name="regId" size="1" onChange="goReg();"> <OPTION value="">Выберите регион</OPTION> <?php //Делаем выборку активных городов $GetFromDb = mysql_query("SELECT * FROM cities WHERE active='yes' ORDER BY parentReg") or die("Не удалось подключиться к базе данных<br>".mysql_error().""); global $regArray; while($citiesActiv = mysql_fetch_array($GetFromDb)) { //Создаем массив, содержащий id регионов с активными городами $regArray[] = $citiesActiv['parentReg']; } if (!empty($regArray)) { global $regArray; $regArray = array_unique($regArray); $count = count($regArray); foreach ($regArray as $regIdArr) { global $regId; $regId = @$_GET['regId']; //Делаем выборку регионов, сортируем по regId $GetFromDb2 = mysql_query("SELECT * FROM regions WHERE regId=$regIdArr ORDER BY regId") or die("Не удалось подключиться к базе данных<br>".mysql_error().""); while ($regArray1 = mysql_fetch_array($GetFromDb2)) { echo "<option value=\"".$regArray1['regId']."\""; if ($regArray1['regId'] == @$regId) echo "selected"; echo ">".$regArray1['regName']."</option>"; } } }
?> </select> </td> </tr> <tr> <td id="moduleBaseL">Город:</td> <td id="moduleBaseR" colspan="2"> <select name="cityId" size="1" id="respCity" onChange="goCity();"> <OPTION value="">Выберите город</OPTION> <!-- Выводим список городов в зависимости от региона--> <?=@$cityListOption?> </select> </td> </tr> <tr> <td id="moduleBaseL">Категория:</td> <td id="moduleBaseR" colspan="2"> <select name="catId" size="1" id="respCat" onChange="goCat();"> <OPTION value="">Выберите категорию</OPTION> <?=@$catListOption?> </select> </td> </tr> <tr> <td id="moduleBaseL">Подкатегория:</td> <td id="moduleBaseR" colspan="2"> <select name="subCatId" size="1" onChange="goSubCat();"> <OPTION value="">Выберите подкатегорию</OPTION> </select></td> </tr> <tr> <td id="moduleBottom" colspan="3"> </td> </tr> </table> <!-- навигация по каталогу : конец --> </form>
</body> </html>
|
ajax.js
| Код | function my_ajax(URL, FNAME) { fName = FNAME; if (window.XMLHttpRequest) { req = new XMLHttpRequest(); req.onreadystatechange = verify; req.open("GET", URL, true); req.send(); } else if (window.ActiveXObject) { req = new ActiveXObject("Msxml2.XMLHTTP"); if (req) { req.onreadystatechange = verify; req.open("GET", URL, true); req.send(null); } } }
function verify() { if (req.readyState == 4) { if (req.status == 200) { var resp = req.responseText; if (fName == 'goReg') { document.getElementById('respCity').outerHTML = '<select size="1" name="respCity">' + resp + '</select>'; } if (fName == 'goCity') { document.getElementById('respCat').outerHTML = '<select size="1" name="respCat">' + resp + '</select>'; } } else alert("ERROR " +req.statusText +' '+req.status+url); } }
function goReg() { url="some.php?regId="+document.forms['form1'].regId.value; var fName = "goReg"; my_ajax(url, fName); } function goCity() { alert('goCity'); url="some.php?regId="+document.forms['form1'].regId.value+"&cityId="+document.forms['form1'].cityId.value; var fName = "goCity"; my_ajax(url, fName); }
function goCat() { url="some.php?regId="+document.forms['form1'].regId.value+"&cityId="+document.forms['form1'].cityId.value+"&catId="+document.forms['form1'].catId.value; my_ajax(url); }
function goSubCat() { url="some.php?regId="+document.forms['form1'].regId.value+"&cityId="+document.forms['form1'].cityId.value+"&catId="+document.forms['form1'].catId.value+"&subCatId="+document.forms['form1'].subCatId.value; my_ajax(url); }
|
some.php
| Код | <?php //Подключаемся к базе данных include_once("../include/config.inc");
header("Content-type: text/plain; charset=windows-1251"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); $regId=@$_GET["regId"]; $cityId=@$_GET["cityId"]; $catId=@$_GET["catId"]; $subCatId=@$_GET["subCatId"];
if (isset($regId) and !empty($regId)) { echo "<option value=\"\"> </option>"; if (!isset($regId) or !is_numeric($regId) or $regId < 0 or $regId == 1) { $GetFromDb = mysql_query("SELECT * FROM cities WHERE active='yes' ORDER BY cityId") or die("Не удалось подключиться к базе данных<br>".mysql_error().""); } else { $GetFromDb = mysql_query("SELECT * FROM cities WHERE parentReg=$regId AND active='yes' ORDER BY cityId") or die("Не удалось подключиться к базе данных<br>".mysql_error().""); } //Делаем выборку городов, сортируем по regId while ($cityArray = mysql_fetch_array($GetFromDb)) { echo "<option value=\"{$cityArray['cityId']}\""; if ($cityArray['cityId'] == @$cityId) echo "selected"; echo ">".$cityArray['cityName']."</option>"; }
} if (isset($cityId) and !empty($cityId)) { global $catId; //Делаем выборку категорий, сортируем по catId $GetFromDb = mysql_query("SELECT * FROM catCategories WHERE parentCatId=0 AND active='yes' ORDER BY catName") or die("Не удалось подключиться к базе данных<br>".mysql_error().""); while ($catArray1 = mysql_fetch_array($GetFromDb)) { echo "<option value=\"{$catArray1['catId']}\""; if ($catArray1['catId'] == @$catId) echo "selected"; echo ">".$catArray1['catName']."</option>"; }
} if (isset($subCatId) and !empty($subCatId)) { echo "***"; if (!isset($catId) or !is_numeric($catId) or $catId < 0) { $GetFromDb = mysql_query("SELECT * FROM catCategories WHERE parentCatId!=0 ORDER BY catName") or die("Не удалось подключиться к базе данных<br>".mysql_error().""); } else { $GetFromDb = mysql_query("SELECT * FROM catCategories WHERE parentCatId=$catId ORDER BY catName") or die("Не удалось подключиться к базе данных<br>".mysql_error().""); } //Делаем выборку подкатегорий, сортируем по catId while ($catArray = mysql_fetch_array($GetFromDb)) { echo "<option value=\"{$catArray['catId']}\""; if ($catArray['catId'] == @$subCatId) echo "selected"; echo ">".$catArray['catName']."</option>"; } }
?>
|
|