Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Формирование нового списка по выбору элемента в другом списке select

Сообщения:  [1-10]   [11-12] 

 
 автор: FireTiger   (06.07.2008 в 17:14)   письмо автору
 
   для: FireTiger   (05.07.2008 в 12:03)
 

И все-таки, все ли сдесь хорошо? У меня только в IE глючит, а исправить незнаю как... Хелп.

   
 
 автор: FireTiger   (05.07.2008 в 12:03)   письмо автору
 
   для: FireTiger   (05.07.2008 в 01:03)
 

Я заметил, что в IE свойство innerHTML плохо отрабатывает... Почему-что option не формируется, то текст возвращается правильный...

   
 
 автор: FireTiger   (05.07.2008 в 01:03)   письмо автору
 
   для: FireTiger   (04.07.2008 в 11:57)
 

Вот сделал что хотел. Очень бы вас попросил, чтобы вы попробовали код в действии и прокоментировали, правильно ли я пишу, все ли в порядке и нет ли чего лишнего. У меня на компе все прекрасно функционирует. Как для новичка в ajax тоже думаю будет интересно. Вот код:
Файл index.htm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <meta name="author" content="">

    <title>Test AJAX</title>
</head>

<body>
<script type="text/javascript" language="javascript">
// функция получения объекта XMLHttpRequest
function getXmlHttp(){
    var req;
    try {
        req = new ActiveXObject("Msxml2.XMLHTTP"); // IE
    } catch (e) {
        try {
            req = new ActiveXObject("Microsoft.XMLHTTP"); // IE
        } catch (E) {
            req = false;
        }
    }
    if (!req && typeof XMLHttpRequest!='undefined') { 
        if (req.overrideMimeType) {
            req.overrideMimeType('text/xml'); // посылаем заголовок XML mime-type
        }
        req = new XMLHttpRequest(); // Mozilla, Safari, Opera, ...
    }
  return req;
}
    var req = getXmlHttp(); // получаем объект XMLHttpRequest
// функция самого запроса к серверу
    function makeRequest(url,container,params) {
        if (!req) {
            alert('AJAX not supported');
            return false;
        }
        req.open('POST', url, true);
        req.onreadystatechange = function() { 
            abortRequest = window.setTimeout("req.abort();", 5000); 
            if (req.readyState == 3 || req.readyState == 1) {  
                document.getElementById("loading").style.display = 'block';  
            } 
            if (req.readyState == 4) {
                document.getElementById("loading").style.display = 'none'; 
                clearTimeout(abortRequest); 
                if (req.status == 200) {
                    showData(container); 
                } else {
                    alert('С запросом возникла проблема. ' + req.statusText);
                }
            }
        };
        req.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
        req.send(params);
    }
    // функция формирования параметров для получения категорий
    function getCategories(container) {
        var idSection = event.srcElement.value;
        var params = 'idSection='+idSection+'&doajax=getCategories';
        makeRequest('ajax.php',container,params);
    }
    // функция показа результата запроса
    function showData(container) {
        if(req.responseText != ''){
            document.getElementById(container).innerHTML = req.responseText;  
            document.getElementById(container).disabled = false;  
        } else {
            document.getElementById(container).innerHTML = '<option value="0">- Сначала выберите раздел -</option>';  
            document.getElementById(container).disabled = true;  
        }    
    }
</script>
<div id="loading" style="position:absolute; top:40%; left:40%; display: none; width: 250px; font-family: Verdana; font-size: 11pt; border: 1px solid #BBBBBB; background: #EEEEEE; padding: 5px 5px 5px 5px;">Загрузка данных. Подождите...</div>

<select name="sectionId" id="sectionId" onchange="getCategories('catId')">
       <option value="0">- Выберите раздел -</option>
<option value="1" >Первый раздел</option>
<option value="2" >Второй раздел</option>
<option value="3" >Третий раздел</option>
<option value="4" >Четвертый раздел</option>
<option value="5" >Пятый раздел</option>
       </select>
       <br>
       <select name="catId" id="catId" disabled="true">
       <option value="0">- Сначала выберите раздел -</option>
       </select>
</body>
</html>

Файл ajax.php:

<?php
  header
("Content-type: text/html; charset=utf-8");
  
header("Cache-Control: no-store, no-cache, must-revalidate");
  
header("Cache-Control: post-check=0, pre-check=0"false);
  
$doAjax $_POST["doajax"];
  
$idSection $_POST["idSection"];
  if (
$idSection != 0) {
      
// тут дальше можно написать запрос на выборку категорий с idSection=$idSection
      // а так, для легкости примера, просто вручную формируем список категорий
      
switch ($doAjax) {
          case 
"getCategories":
              echo 
"<option value=1>Первая категория</option><option value=1>Вторая категория</option>";
              break;
      }
  }
?>

   
 
 автор: FireTiger   (04.07.2008 в 11:57)   письмо автору
 
   для: GeorgeIV   (04.07.2008 в 11:50)
 

Спасибо, то что нужно! Когда сделаю скрипт - выложу

   
 
 автор: GeorgeIV   (04.07.2008 в 11:50)   письмо автору
 
   для: FireTiger   (04.07.2008 в 11:43)
 

Вверху смотришь ФорумPHP Вопрос ?вики система

   
 
 автор: FireTiger   (04.07.2008 в 11:43)   письмо автору
 
   для: GeorgeIV   (04.07.2008 в 11:40)
 

а можно линк?

   
 
 автор: GeorgeIV   (04.07.2008 в 11:40)   письмо автору
 
   для: FireTiger   (04.07.2008 в 11:28)
 

да я без библиотек обхожусь, вещь то простая. в соседней ветке простейший пример приведен, если с аяксом еще нет опыта

   
 
 автор: FireTiger   (04.07.2008 в 11:28)   письмо автору
 
   для: GeorgeIV   (04.07.2008 в 11:23)
 

Так замечательно, намного выгодней... Значит алгоритм такой: выбираем из базы все разделы и формируем их список. Список категорий оставляем disable. При onchange списка разделов посылаем запрос на выборку категорий и точно также формируем список категорий. Понятно. А как вы посоветуете использовать ajax, взять библиотеку какую-нибуть?

   
 
 автор: GeorgeIV   (04.07.2008 в 11:23)   письмо автору
 
   для: FireTiger   (04.07.2008 в 11:10)
 

База имеется ввиду в том смысле, что не держать все массивы в скрипте а выбирать из базы. Первый запрос выберет сразу разделы и сформируешь первый селект. После выбора первого селекта его ID будет ключом для выбора категорий. Но в таком варианте аякс придется прикрутить.

   
 
 автор: FireTiger   (04.07.2008 в 11:10)   письмо автору
 
   для: GeorgeIV   (04.07.2008 в 10:36)
 

Т.е. нужно создать одномерный массив разделов и двумерный массив категорий примерно так:

categories[id_раздела][id_категории] = "Название категории";

а потом сформировать циклом select - это ясно. Но есть ли смысл формировать эти массивы, на php мне придется использовать цикл на формирования массива categories а потом еще один цикл на формирование самого select'a. Его нельзя никак объединить? чтобы не использовать два цикла (да и еще цикл на формирование разделов....). База есть, а что Вы имели ввиду "брать запросами из базы"?

   

Сообщения:  [1-10]   [11-12] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования