Привет. Есть кто-нибудь, использующий 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>
Может кто мне помочь наладить какой нибудь из этих вариантов? Или может есть более удобный?