Почитал тему на вашем форуме, но так ответа на нее не было... У меня такая же проблема. Буду рад если помогут: 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) { var _select = document.getElementById("product"); _select.innerHTML = ""; // Удаляем всех потомков var option = document.createElement("option"); _select.appendChild(option); if ( mkr == "" ) url = "getList.php?category=" + ctg; else url = "getList.php?category=" + ctg + "&maker=" + mkr; createRequest(); request.open("GET", url, true); request.onreadystatechange = makeList; request.send(null); } function makeList() { if (request.readyState == 4) { 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("maker"); } if ( action == "makeProductList" ) { _select = document.getElementById("product"); } _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['maker']) ) { // Получаем из БД список производителей $query = 'SELECT city, district FROM address WHERE city='.$_GET['city'].' '; $res = mysql_query( $query ); while ( $mkr = mysql_fetch_array( $res ) ) { $makerOptions = $makerOptions.'<option value="'.$mkr['m_id'].'">'.$mkr['m_title'].'</option>'; } $response = '<?xml version="1.0" encoding="windows-1251" standalone="yes"?>'. '<response>'. '<action>'. 'makeMakerList'. '</action>'. '<options>'. $makerOptions. '</options>'. '</response>'; } else { // Если выбрано значение из списка производителей - формируем список товаров $query = 'SELECT district,street FROM address WHERE district='.$_GET['district'].' '; $res = mysql_query( $query ); while( $prd = mysql_fetch_array( $res ) ) { $productOptions = $productOptions.'<option value="'.$prd['product_id'].'">'.$prd['title'].'</option>'; } $response = '<?xml version="1.0" encoding="windows-1251" 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=windows-1251"); ?> <html> <head> <title>Динамический select</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <script type="text/javascript" src="ajax.js"> </script> <link href="css/style.css" rel="stylesheet" type="text/css"> </head> <body> <?php echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post">'; // Получаем из БД список категорий $query = 'SELECT city_id,city_name FROM city'; $res = mysql_query( $query ); echo '<label>Категории:</label><br />'; echo '<select name="category" id="category" size="4" onchange="getList(this.value, \'\');">'; echo '<option value="0">Выберите</option>'; while ( $ctg = mysql_fetch_array( $res ) ) { echo '<option value="'.$ctg['city_id'].'">'.$ctg['city_name'].'</option>'; } echo '</select><br/>'; ?> <label>Производители:</label><br /> <select name="maker" id="maker" size="4" onchange="getList(this.form.elements['category'].value, this.value);"> </select><br/> <label>Товары:</label><br /> <select name="product" size="4" id="product"> </select> </form> </body> если в файлеgetList.php меняю местами: header('Content-Type: text/xml'); То есть раньше стояла в конце. А теперь воткнул в начало. И Firebug выдает: xmlDoc.getElementsByTagName("action")[0] is undefined Замечу! Скрипт взят не помню откуда с их базой все работает идеально.. А с моей не работает