Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подзагрузка данных и постройка списков, страна->город->и т.д. 
:(
    Опции темы
Ринат
Дата 1.8.2005, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 31.3.2005

Репутация: -2
Всего: нет



добрый день! такой вопрос,
2 связанных списка, массивы сами объявляются в js
но значений много, и в массивы в js все не упишешь, а потмо список изменяется со временем
так, вот значения хранятся в БД, как брать значения из БД
то есть
js у клиента php на сервере,
например. в поле со списком 1 выбрано Египет
в полусо списком 2 списко населенных пунктов Египта
как осуществить, то есть данные для 2 полей со списками из БД сделать,
можно на пхп, полностью., но тогда страницу придется перегружать
а как этого избежать
спасибо за внимание

Добавлено @ 16:38
то есть в принцпипе это невозможно, так как js на клиенте , а mysql на сервере
из js обратиться нельзя, это очевидно
наверняка есть готовые решения
как разрешить подобную задачу
спасибо

Это сообщение отредактировал(а) Ринат - 1.8.2005, 16:45
PM MAIL   Вверх
o.s.a.
Дата 1.8.2005, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Xo4y B MocKBy
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 16.2.2005
Где: Ташкент

Репутация: 5
Всего: 15



А теперь, если можно, по-русски smile


--------------------
Не могу стоять, пока другие работают, пойду полежу.
PM MAIL ICQ   Вверх
Ринат
Дата 1.8.2005, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 31.3.2005

Репутация: -2
Всего: нет



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

PM MAIL   Вверх
o.s.a.
Дата 2.8.2005, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Xo4y B MocKBy
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 16.2.2005
Где: Ташкент

Репутация: 5
Всего: 15



Варианта 2:
1) Загрузить из БД в массив сразу все возможные значения для 2-го списка,
а затем в зависимости от выбора в 1-ом списке, показывать соотв. 2-ой список.
2) Использовать скрипт JSHttpRequest (для динамической подгрузки данных) http://www.dklab.ru/lib/Subsys_JsHttpRequest/


--------------------
Не могу стоять, пока другие работают, пойду полежу.
PM MAIL ICQ   Вверх
Ринат
Дата 2.8.2005, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 31.3.2005

Репутация: -2
Всего: нет



спасибо! 2 вариант оптимальныйс
спасибо, будем разбираться
PM MAIL   Вверх
Ринат
Дата 4.8.2005, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 31.3.2005

Репутация: -2
Всего: нет



добрый день
Цитата
Загрузить из БД в массив сразу все возможные значения для 2-го списка,
а затем в зависимости от выбора в 1-ом списке, показывать соотв. 2-ой список.

вот инетерсный момент, в первый раз ок, в список 2 загружаю значения соответсвующие списку 1
но при изменении в списке 1 , нужно подгружать значения заново, то есть без перезагрузки страницы никак (если не использовать , предложенный Вами вариант по ссылке)
у вас есть опыт создания подобного? и работы с приведенными материалами в ссылке
с JS совсем сложно..надо заниматься

Это сообщение отредактировал(а) Ринат - 4.8.2005, 13:32
PM MAIL   Вверх
o.s.a.
Дата 4.8.2005, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Xo4y B MocKBy
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 16.2.2005
Где: Ташкент

Репутация: 5
Всего: 15



Ринат для первого варианта ты загружаешь массив примерно такой:
Цитата
Array (
0 -> Array (0 -> value1;
                  1 -> value 2;
                  и т.д.  );
1 -> Array ((0 -> value1;
                  1 -> value 2;
                  и т.д.  );
и т.д.
)


т.е. 1-ый ключ - это варианты списка №1,
а содержащийся в нем массив - соотв значения.
Вот в зависимости от выбранного в списке 1 ты выводишь нужное


С JSHttpRequest я разобрадся быстро - классная вешь

Это сообщение отредактировал(а) o.s.a. - 4.8.2005, 19:53


--------------------
Не могу стоять, пока другие работают, пойду полежу.
PM MAIL ICQ   Вверх
Ринат
Дата 4.8.2005, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 31.3.2005

Репутация: -2
Всего: нет



да я так делал, все получалось, все ок работает, но если массивов немного, это я сделал
но мне данные их БД нужны
с вариантом Котерова пробую, если у Вас есть варинат рабочий, не могли бы пример со списками показать
как именно загрузчик в этому случае доожен выглядеть и что в самой форме, ясно в скрипте надо делать типа цикла, для каждой строки результата выдадвать стороку типа
<option>$row['value']</option>
спасибо за помощь, просто очень нужно, да и врубиться хочу


Это сообщение отредактировал(а) Ринат - 4.8.2005, 23:31
PM MAIL   Вверх
o.s.a.
Дата 5.8.2005, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Xo4y B MocKBy
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 16.2.2005
Где: Ташкент

Репутация: 5
Всего: 15



Ринат вы свой код выложите, с ним и будем работать


--------------------
Не могу стоять, пока другие работают, пойду полежу.
PM MAIL ICQ   Вверх
Ринат
Дата 5.8.2005, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 31.3.2005

Репутация: -2
Всего: нет



добрый день!
вобщем есть код формы
Код

<select name="land" value='<?=$land?>' onkeyup="doLoadUp()" id="land">

(является списком, значения из бд, полу со списком 1)
Код

<div id=hotel><select id="hotel"><option>Сначала выберите land</option></select><div> 

список 2 , который нужно заоплнять
JS , взятый по примеру и вставленный в форму HTML
Код

<script language="JavaScript" src="../Js.js">
</script>
<script> 
    // Вызывается по тайм-ауту или при щелчке на кнопке. 
    function doLoad(force) { 
        // Получаем текст запроса из <input>-поля. 
        var query = '' + document.getElementById('land').value; 
        // Создаем новый объект JSHttpRequest. 
        var req = new Subsys_JsHttpRequest_Js(); 
        // Код, АВТОМАТИЧЕСКИ вызываемый при окончании загрузки. 
        req.onreadystatechange = function() { 
            if (req.readyState == 4) { 
                if (req.responseJS) { 
                    // Записываем в <div> результат работы. тут вобще нужно выводить результаты работы скрипта, данные из БД
                am='<select id="hotel">';
                for (var i in req.responseJS[a]) {
                am = am + '<option value="' + req.responseJS[i].id +'">' + req.responseJS[i].title +  '</option>';
                }
                am= am + '</select>';
                //сюда предполагается вставлять рузультат
                document.getElementById('hotel').innerHTML = am;
                 } 
                // Отладочная информация. 
                document.getElementById('debug').innerHTML = 
                    req.responseText; 
            } 
        } 
        // Разрешаем кэширование (чтобы при одинаковых запросах 
        // не обращаться к серверу несколько раз). 
        req.caching = true; 
        // Подготваливаем объект.  тут файл обработчика, который достает данные из базы данных
        req.open('POST', 'load.php', true); 
        // Посылаем данные запроса (задаются в виде хэша). 
        req.send({ q: query, test:303 }); 
    } 
    // Поддержка загрузки данных по тайм-ауту (1 секунда после 
    // последнего отпускания клавиши в текстовом поле). 
    var timeout = null; 
    function doLoadUp() { 
        if (timeout) clearTimeout(timeout); 
        timeout = setTimeout(doLoad, 1000); 
    } 
</script> 

а вот и сам обработчик, тут неясно немного, как в масив резельтат заносить

Код

<?
include 'common_functions.php';
$errMsg = '';
session_start();
if (connect($db_host, $db_user, $db_password, $db_name)) {
$land = $_POST['land'];
$query = "SELECT (hotel_name)
            FROM hotel
            WHERE land_name = '$land'";
            $res = query($query);        }
    while($row= mysql_fetch_assoc($result)) 
        { 
        $ht = $row['hotel_name'].        } 
    }
    else 
    {
    $errMsg =  $errMsg=ERROR_MESSAGE12;
    print "<option value=''> Ne naideno</option>";
    }     
require_once "Subsys/JsHttpRequest/Php.php"; 
// Создаем главный объект библиотеки. 
// Указываем кодировку страницы (обязательно!). 

$JsHttpRequest =& new Subsys_JsHttpRequest_Php("windows-1251"); 
// Получаем запрос. тут нужно хаписывать строик зароса
$q = $_REQUEST['q']; 
// Формируем результат прямо в виде PHP-массива! здесь тоже неверно уменя

$_RESULT = array( 
  "q"     => $q, 
  "md5"   => $row= mysql_fetch_assoc($result),
); 
// Демонстрация отладочных сообщений. 
if (strpos($q, 'error') !== false) { 
  callUndefinedFunction(); 
} 

echo "<b>REQUEST_URI:</b> ".$_SERVER['REQUEST_URI']."<br>"; 
echo "<b>Loader used:</b> ".$JsHttpRequest->LOADER; 
?> 

вот такие пироги, помогите плих разобраться,Как верно
PM MAIL   Вверх
o.s.a.
Дата 6.8.2005, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Xo4y B MocKBy
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 16.2.2005
Где: Ташкент

Репутация: 5
Всего: 15



Вот скрипт, естественно не проверенный, т.к. у меня нет твоих записей из БД;
так что могут быть ошибки
1.php
Код

<html>
<head>
<style type="text/css">

</style>
<script language="JavaScript" src="scripts/JSHttpRequest/JSHttpRequest.js"></script>
</head>
<body>
<form>
<select name="land" value='<?=$land?>' onChange="doLoadUp()" id="land">
 <option name="select1[]" value="land1"> land1 
 <option name="select1[]" value="land2"> land2 
 <option name="select1[]" value="land3"> land3 
</select>

<select name="select" disabled id="hotel">
 <option name="default" value="default">Сначала выберите land</option>
</select>
</form>
<DIV id=debug style="BORDER-RIGHT: red 1px dashed; BORDER-TOP: red 1px dashed; MARGIN: 2px; BORDER-LEFT: red 1px dashed;
                     BORDER-BOTTOM: red 1px dashed">
Debug info 
</DIV>
<script language="JavaScript">
    function doLoadUp() {  
        var sel_1 = document.getElementById('land');
        // Получаем значение выбранного select'a 
        var land = '' + sel_1.options[sel_1.selectedIndex].value; 
        var req = new JsHttpRequest(); 
        // Код, АВТОМАТИЧЕСКИ вызываемый при окончании загрузки. 
        req.onreadystatechange = UpdateSecondSelect();

        function UpdateSecondSelect() { 
            if (req.readyState == 4) { 
                if (req.responseJS) { 
                  var sel_2 = document.getElementById('hotel');
                  sel_2.disabled = false; 
                  sel_2.innerHtml = "";              
                  var variable;
                  var textToOption;
                  for (var i=0; i<=req.responseJS.select2.length ; i++) {
                    variable = createElement("OPTION"); //создаем новый option (пустой)
                    textToOption = document.createTextNode(req.responseJS.select2[i]); 
                    variable.appendChild(textToOption); //прописываем тект option'а  
                    sel_2.appendChild(variable); //добавляем только что созданный option в select_2 
                  }
                }
                // Отладочная информация. 
                document.getElementById('debug').innerHTML = req.responseText; 
            } 
        } // End of function UpdateSecondSelect()

        // Разрешаем кэширование (чтобы при одинаковых запросах не обращаться к серверу несколько раз). 
        req.caching = true; 
        // Подготваливаем объект.  тут файл обработчика, который достает данные из базы данных
        req.open('GET', '2.php', true); 
        // Посылаем данные запроса (задаются в виде хэша). 
        req.send({ q: land }); 
    }           
</script>
</body>
</html>



2.php

Код

<?
include 'common_functions.php';
$land = $_GET['q'];
session_start();

if (connect($db_host, $db_user, $db_password, $db_name)) {
  $query = "SELECT (hotel_name)  FROM hotel WHERE land_name = '$land'";
  $res = query($query);        
  while($row= mysql_fetch_assoc($result)) { 
     $ht[] = $row['hotel_name']; //здесь формируем массив, который и передаем
                                 //причем здесь ты создаешь одномерный массив лишь со значениями будущих option'ов
                                 //а мог бы создать многомерный массив со значениями для name, value и текстом будущих option'ов
  }
}  
     
require_once "Subsys/JsHttpRequest/Php.php"; 
// Создаем главный объект библиотеки. 
// Указываем кодировку страницы (обязательно!). 
$JsHttpRequest = new Subsys_JsHttpRequest_Php("windows-1251"); 
// Формируем результат прямо в виде PHP-массива!
$_RESULT = array( 
  "select2" => $ht
);
?> 


Это сообщение отредактировал(а) o.s.a. - 6.8.2005, 10:09


--------------------
Не могу стоять, пока другие работают, пойду полежу.
PM MAIL ICQ   Вверх
Ринат
Дата 6.8.2005, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 31.3.2005

Репутация: -2
Всего: нет



спасибо огромное за скрипты готовые
полсе тестов снова не работает
не пойму что не так, выглядит совершенно нормально
вот код в загрузчике
Код

 while($row= mysql_fetch_assoc($res)) { 
     $ht[] = $row['hotel_name']; //здесь формируем массив, который и передаем
                                 //причем здесь ты создаешь одномерный массив лишь со значениями будущих option'ов
                                 //а мог бы создать многомерный массив со значениями для name, value и текстом будущих option'ов
  }
...
$_RESULT = array( 
  "select2" => $ht
);

по идее передаем массив строк
неясно почему не работет
в самой форме
Код

  for (var i=0; i<=req.responseJS.select2.length ; i++) { 
                    variable = createElement("OPTION"); //создаем новый option (пустой)
                    textToOption = document.createTextNode(req.responseJS.select2[i]); 
                    variable.appendChild(textToOption); //прописываем тект option'а  
                    sel_2.appendChild(variable); //добавляем только что созданный option в select_2 
                  }
                }


и поля

Код

<select name="land" value='<?=$land?>' onChange="doLoadUp()" id="land">
<?
    include_once 'common_functions.php';
    if (connect($db_host, $db_user, $db_password, $db_name)) { print "connect ok";
        $query = "SELECT (land_name)
                  FROM land
                  ORDER by land_name DESC";
        $result = query($query);
        while($row= mysql_fetch_assoc($result)) 
        { 
        echo '<option value="'.$row['land_name'].'">'.$row['land_name'].'</option>'; 
        } 
    }
    else 
    {
    $errMsg=ERROR_MESSAGE12;
    print "<option value=''> Ne naideno</option>";
    }     

?></select>
<select name="select" disabled id="hotel">
<option name="default" value="default">Сначала выберите land</option>
</select>

простите, не пойму почему не работает....что не так в JS




Это сообщение отредактировал(а) Ринат - 6.8.2005, 22:57
PM MAIL   Вверх
o.s.a.
Дата 8.8.2005, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Xo4y B MocKBy
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 16.2.2005
Где: Ташкент

Репутация: 5
Всего: 15



Н-да, тот скрипт (JSHttpRequest) разработчики немножко обновили.
Мне пришлось с ним разбираться заново. В файле js.js браузер стал ругаться на конструкцию
Код

with (/*объект*/)  {}

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

З.Ы. библиотеку и пример смотри по ссылке link


--------------------
Не могу стоять, пока другие работают, пойду полежу.
PM MAIL ICQ   Вверх
Ринат
Дата 14.8.2005, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 31.3.2005

Репутация: -2
Всего: нет



добрый день! где можно протестить js скрипты
спасибо за ссылку, сейчас буду делать
все получилось, огромное спасибо!

Это сообщение отредактировал(а) Ринат - 15.8.2005, 00:48
PM MAIL   Вверх
kiruxa
Дата 13.10.2005, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 13.10.2005

Репутация: нет
Всего: нет



Посмотрел топик,
У меня теже проблемы, борюсь

взял ваши скрипты и попытался на своем сайте протестить и smile
поменял только запрос к базе и все ...

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

зараннее спасибо..
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.5732 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.