day & night

 
создание динамических списков на ajax+jQuery, изучение применения jQuery
Дата публикации:
#1
lunar-fairy



Новичок


Группа: Пользователи
Сообщений: 8
Регистрация: 21.12.2007
Пользователь №: 661.377


Респектов: 0
----------


Предупреждений:


Привет. Есть кто-нибудь, использующий jQuery?
Мне нужно сделать 2 связанных селекта: при выборе значения в первом (вуз) появляются соответствующие значения во втором (факультеты). Названия вузов и факультетов лежат в БД. Язык сайта php, конкретно php5.
Мне посоветовали использовать jQuery. Получился скрипт:
Code

<script type="text/javascript" src="script/jquery-1.2.6.js"></script>
<script type="text/javascript">
function makelist(obj){
       $.post('/ajax.php',{vuzes: obj.value}, onAjaxSuccess);
}
function onAjaxSuccess(xml)
{
 // Здесь мы получаем данные, отправленные сервером
 items = $("item", xml);
 // Находим item с id="0"
 item = $("#0", xml);
       // Извлекаем текст из элемента, пусть хоть что-то выведет
 alert(item.html());
}

</script>

Функция makelist естественно привязана к onChange первого списка. Ошибка либо в $.post либо в onAjaxSuccess.
Файл ajax.php:
Code
<?php
header('Content-Type: text/xml; charset=windows-1251');
include '../connect.php';
$request = $_POST["vuzes"];
if($request) echo loadData($request);

function loadData($request){
 // Функция, как бы делающая выборку из базы.
         $svz=mysql_query("Select * from vuz Order By sname", $conn);
       if(mysql_num_rows($svz)>0){
               while($rvz=mysql_fetch_array($svz)){
                   if($request == $rvz['id']) {
                           $sfc=mysql_query("Select * from facultets Where id_vuz=".$rvz['id']." Order By name_f", $conn);
                           $result='<item id="0">Выберите0</item>';
                           if(mysql_num_rows($sfc)>0){
                                   while($rfc=mysql_fetch_array($sfc)){
                                           $result .= '<item id='.$rfc['id'].'>'.$rfc['name_f'].'</item>';
                                   }
                           }

                         }
           }
       }

 if($result) return $result='<?xml version="1.0" encoding="windows-1251"?>
                 <list>'.$result.'</list>';
}
?>


Правда я пробовала сделать и без jQuery:
Code

<script type="text/javascript">
// Функция, осуществляющая AJAX запрос.
function loadXMLDoc( method, url ){
 if ( window.XMLHttpRequest ) {
   req = new XMLHttpRequest();
   req.onreadystatechange = processReqChange;
   req.open(method, url, true);
   req.send( null );
 } else if ( window.ActiveXObject ) {
   req = new ActiveXObject( "Microsoft.XMLHTTP" );
   if ( req ) {
     req.onreadystatechange = processReqChange;
     req.open( method, url, true );
     req.send( );
   }
 }
}
// Функция, выполняемая при изменении статуса
// запроса, если статус  равен 200, данные получены.
function processReqChange() {
 if ( req.readyState == 4 ) {
   if ( req.status == 200 )
     getfclts(req.responseXML.documentElement);
   else
     alert("There was a problem retrieving the XML data:\n" + req.statusText);
 }
}
function makelist( obj ) {
   var url = "ajax.php?vuzes=" + obj.value;
   loadXMLDoc( "POST", url );
}
function getfclts( xml ) {
 var list = xml.getElementsByTagName( "item" );
 var _select = document.getElementById( "list" );
 _select.innerHTML = ""; // Удаляем всех потомков.
 // Создаем список с доступными факультетами.
 for ( i=0; i<list.length; i++ ) {
   var option = document.createElement( "option" );
   var optionText = document.createTextNode( list[i].firstChild.data );
   option.appendChild( optionText );
   option.setAttribute( "value",list[i].getAttribute("value") );
   _select.appendChild( option );
 }
}
</script>


Может кто мне помочь наладить какой нибудь из этих вариантов? Или может есть более удобный? sad.gif
User is offline
Go topGo end

Topic Options
Сейчас: 2.05.2024 - 22:28
Мобильная версия | Lite версия