почему-то не идет выборка из второго селекта, ну как следствие и из третьего, происходит только выборка из первого.
вот код:
Есть базы данных с таблицами: course:id_course, name_course
group: id_group, lname_gr
lesson:id_les, name_les, id_group, id_course
ajax.js:
var request = null;
function createRequest() {
try {
request = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
request = null;
}
}
}
if (request == null) alert("Ошибка при создании объекта XMLHttpRequest!");
}
function getList(ctg, mkr) {
document.getElementById("lessons").innerHTML = '<option value="0">Выберите</option>';
if ( mkr == "" )
url = "getList.php?courses=" + ctg;
else
url = "getList.php?courses=" + ctg + "&groups=" + mkr;
createRequest();
request.open("GET", url, true);
request.onreadystatechange = makeList;
request.send(null);
}
function makeList() {
// только при состоянии "complete"
if (request.readyState == 4) {
// для статуса "OK"
if (request.status == 200) {
// здесь идут построение списков заново
responseXml = request.responseXML;
xmlDoc = responseXml.documentElement;
action = xmlDoc.getElementsByTagName("action")[0].firstChild.data;
options = xmlDoc.getElementsByTagName("options")[0].firstChild.data;
if ( action == "makeMakerList" )
document.getElementById("groups").innerHTML = options;
else
document.getElementById("lessons").innerHTML = options;
} else {
alert("Не удалось получить данные от сервера:\n" + request.statusText);
}
}
}
var request = null;
function createRequest() {
try {
request = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
request = null;
}
}
}
if (request == null) alert("Ошибка при создании объекта XMLHttpRequest!");
}
function getList(ctg, mkr) {
var _select = document.getElementById("lessons");
_select.innerHTML = ""; // Удаляем всех потомков
var option = document.createElement("option");
var optionText = document.createTextNode("Выберите");
option.appendChild(optionText);
option.setAttribute("value", "0");
_select.appendChild(option);
if ( mkr == "" )
url = "getList.php?courses=" + ctg;
else
url = "getList.php?courses=" + ctg + "&groups=" + mkr;
createRequest();
request.open("GET", url, true);
request.onreadystatechange = makeList;
request.send(null);
}
function makeList() {
// только при состоянии "complete"
if (request.readyState == 4) {
// для статуса "OK"
if (request.status == 200) {
// здесь идет построение списков заново
var responseXml = request.responseXML;
var xmlDoc = responseXml.documentElement;
var action = xmlDoc.getElementsByTagName("action")[0].firstChild.data;
if ( action == "makeMakerList" ) {
_select = document.getElementById("groups");
} else {
_select = document.getElementById("lessons");
}
_select.innerHTML = ""; // Удаляем всех потомков
options = xmlDoc.getElementsByTagName("option");
for (var i=0; i<options.length; i++) {
// Извлекаем значение атрибута value и текст
var value = options[i].getAttribute("value");
var text = options[i].firstChild.data;
// Формируем очередной элемент option
var option = document.createElement("option");
var optionText = document.createTextNode(text);
option.appendChild(optionText);
option.setAttribute("value", value);
_select.appendChild(option);
}
} else {
alert("Не удалось получить данные от сервера:\n" + request.statusText);
}
}
}
getList.php:
<?php
// Соединяемся с сервером базы данных
require 'connect.php';
// Если выбрано значение первого списка - формируем второй список
if ( !isset($_GET['groups']) ) {
// Получаем из БД список производителей
$query = 'SELECT DISTINCT a.id_group AS id_gr, a.lname_gr AS l_gr
FROM group a INNER JOIN lesson b
ON a.id_group=b.id_group
WHERE b.id_course='.$_GET['courses'].'
ORDER BY a.id_group';
$res = mysql_query( $query );
$makerOptions = '<option value="0">Выберите</option>';
while ( $mkr = mysql_fetch_array( $res ) ) {
$makerOptions = $makerOptions.'<option value="'.$mkr['id_gr'].'">'.$mkr['l_gr'].'</option>';
}
$response = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'.
'<response>'.
'<action>'.
'makeMakerList'.
'</action>'.
'<options>'.
$makerOptions.
'</options>'.
'</response>';
} else { // Если выбрано значение из списка производителей - формируем список товаров
$query = 'SELECT id_les, name_les
FROM lesson
WHERE id_course='.$_GET['courses'].'
AND id_group='.$_GET['groups'].'
ORDER BY id_les';
$res = mysql_query( $query );
$productOptions = '<option value="0">Выберите</option>';
while( $prd = mysql_fetch_array( $res ) ) {
$productOptions = $productOptions.'<option value="'.$prd['id_les'].'">'.$prd['name_les'].'</option>';
}
$response = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'.
'<response>'.
'<action>'.
'makeProductList'.
'</action>'.
'<options>'.
$productOptions.
'</options>'.
'</response>';
}
header('Content-Type: text/xml');
echo $response;
?>
index.php:
<?php
// Соединяемся с сервером базы данных
require 'connect.php';
header("Content-Type: text/html; charset=utf-8");
?>
<html>
<head>
<title>Динамический select</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="ajax.js"> </script>
</head>
<body>
<?php
echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post">'."\n";
// Получаем из БД список категорий
$query = 'SELECT id_course, name_course FROM course WHERE 1 ORDER BY id_course';
$res = mysql_query( $query );
echo 'Категории: <select name="courses" id="courses" onchange="getList(this.value, \'\');">'."\n";
echo '<option value="0">Выберите</option>'."\n";
while ( $ctg = mysql_fetch_array( $res ) ) {
echo '<option value="'.$ctg['id_course'].'">'.$ctg['name_course'].'</option>'."\n";
}
echo '</select><br/>'."\n";
?>
Производители:
<select name="groups" id="groups" onchange="getList(this.form.elements['courses'].value, this.value);">
<option value="0">Выберите</option>
</select><br/>
Товары: <select name="lessons" id="lessons"><option value="0">Выберите</option></select>
</form>
</body>
</html>
Спустя 5 часов, 28 минут, 30 секунд (18.05.2011 - 14:52) Dmitriy29 написал(а):
Ну опытные Гуру! посмотрите своим набитым глазам и скажите что может быть причиной не работоспособности данного скрипта!
Спустя 31 минута, 4 секунды (18.05.2011 - 15:23) Winston написал(а):
Вот тоже такое, может почерпнешь оттуда что-то.
Спустя 7 минут, 19 секунд (18.05.2011 - 15:30) Dmitriy29 написал(а):
Цитата (PHPprogramer @ 18.05.2011 - 12:23) |
Вот тоже такое, может почерпнешь оттуда что-то. |
Спасибо! будем разбираться !
Спустя 2 часа, 4 минуты, 14 секунд (18.05.2011 - 17:34) Greg1978 написал(а):
что пишет firebug ?
Да кстати не плохо было бы использовать FirePHP помогает очень, да же не нужно обработчик выдумывать он и есть обработчик в консоль JS.
Да кстати не плохо было бы использовать FirePHP помогает очень, да же не нужно обработчик выдумывать он и есть обработчик в консоль JS.
Спустя 2 часа, 51 минута, 42 секунды (18.05.2011 - 20:26) Dmitriy29 написал(а):
Цитата (Greg1978 @ 18.05.2011 - 14:34) |
что пишет firebug ? Да кстати не плохо было бы использовать FirePHP помогает очень, да же не нужно обработчик выдумывать он и есть обработчик в консоль JS. |
Спасибо) поставил себе firephp! до этого им не пользовался
а пишет он следующиее: xmlDoc.getElementsByTagName("action")[0] is undefined