[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ajax и выборка из 3х select +php + mysql
Dmitriy29
доброго времени суток, есть аякс скрипт связанный с 3мя селектами , информация берется из базы данных mysql, вот php скрипт и вообще весь листинг реализации данной задачи.

почему-то не идет выборка из второго селекта, ну как следствие и из третьего, происходит только выборка из первого.

вот код:
Есть базы данных с таблицами: 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.

Спустя 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
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.