Просмотр полной версии : поМогите с AJAxом!
У меня такой вопрос как организовать такое же
на примере http://www.lasso.pro/selectCombo/
Есть 2 бд
1)CREATE TABLE `strani` (
`id` varchar(20) NOT NULL,
`strana` varchar(25) default NULL
) ;
INSERT INTO `strani` VALUES ('1', 'Россия (Russia)');
INSERT INTO `strani` VALUES ('2', 'Украина (Ukraine)');
2)CREATE TABLE `gorod` (
`id` varchar(20) NOT NULL,
`id_strana` varchar(20) NOT NULL,
`gorod` varchar(25) default NULL
) ;
http://www.lasso.pro/selectCombo/ сделано было при помощи jquery.selectCombo1.2.6.js ну я не могу разобраться как это перевести на php! Или вообще как вы это решали на своем сайте?
KaMiKadZe
03.10.2009, 23:43
При выборе одного из списка определяем какой выбрали (говорю определяем так как не знаю можно ли определить сразу не перебирая все элементы списка какой наш) после определения посылаем ajax запросом скрипту номер списка это будет одновременно и id в базе SELECT * FROM `gorod` WHERE id_strana='$id'; после работы скрипта все возвращается и работает уже с возвращенными значениями создавая 2 список
Вот весь алгоритм работы
С jQuery примерно так. Выбираешь страны из бд, заносишь в массив $countryArr, потом выводишь в списке. При событии onChange() получаем Id страны и вытаскиваем города.
<html>
<head>
<title></title>
<script src='../js/jquery.js' type='text/javascript'></script>
<script type="text/javascript">
$(document).ready(function(){
showCountriesById($('#countryId').val());
});
function showCountriesById (val) {
$.ajax({
type: "POST",
url: "ajax.php",
data: "countryId="+val,
success: function(html){
$("#cityContainer").html(html);
}
});
}
</script>
</head>
<body>
<select name="countryId" id="countryId" onchange="showCountriesById(this.value)">
<?php
//Выводишь страны
if (isset( $countryArr))
{
?>
<?php
foreach ( $countryArr as $s) {
?>
<option value="<?=$s['id']?>"><?=$s['strana']?></option>
<?php
}
?>
<?php
}
?>
</select>
<div id="cityContainer"> </div>
</body>
</html>
Файл ajax.php
<?php
$countryId = $_POST['countryId'];
//Выбираешь из бд города и заносишь в массив
$html .= '<select name="cities">';
while ($row = mysql_fetch_array($res)) {
$html .= '<option value="'.$row['id'].'" >'.$row['gorod']'.</option>';
}
echo $html;
?>
мой вариант без Jqeury ! работает в ОПЕРЕ 100% в других не тестил.
содержимое файла 1.php
<script>
function AjaxFunc ()
{
x = document.getElementById("select");//выбераем наш селект
x_send = x.selectedIndex; //Теперь x_send это то значение которое выбрали
//тут создаю обьект
if(window.XMLHttpRequest){
ajax1 = new XMLHttpRequest();
}
else
if(window.ActiveXObject)
{
ajax1 = new ActiveXObject("Microsoft.XMLHTTP");
}
else {
return;
};
ajax1.open("GET","ajax.php?select="+x_send, true);//делаю опен. Селект передаю через сылку
ajax1.send(null);// так вроде надо))
ajax1.onreadystatechange = function()// тут обрабатываю то что пришло
{
if (ajax1.readyState == 4 && ajax1.status == 200)
{
a = document.getElementById("div");
a.innerHTML = ajax1.responseText;
};
}
};
</script>
<select name="Strana" onchange='AjaxFunc()' id="select" >
<?php
// тут должна быть функция mysql_pconnect
mysql_select_db("Magaz");// в моем случае база называлась МАГАЗ
$sql = "SELECT * FROM strani";// выбераю все страны
$sql_result = mysql_query($sql);
$sql_arr = mysql_fetch_array($sql_result);
do {
echo ("<option id='".$sql_arr['id']."'>".$sql_arr['strana']."
</option>");// выводим список всех стран в селекте
}
while ($sql_arr = mysql_fetch_array($sql_result))
?>
</select>
<form id="div">
//сюда мы поместим наш ответ с городами
</form>
Содержимое файла ajax.php
<?php
// тут также должна быть функция mysql_connect
mysql_select_db("Magaz");// опять подключаемся к базе
$sql = "SELECT * FROM gorod WHERE id_strana = ".$_GET['select'];// в $_GET['select'] у нас содержиться // код страны которую выбрал пользователь. Выбираю все где код страны равен $_GET['select']
$sql_result = mysql_query($sql);
$sql_fetch_array = mysql_fetch_array($sql_result);
//формирую ответ
echo ("<select name='gorod'>");
do {
echo ("
<option>".$sql_fetch_array['gorod']."</option>");
}
while ($sql_fetch_array = mysql_fetch_array($sql_result));
echo ('</select>');
?>
Сделал очень быстро! может гденить работать не будет! надо проверить еще на иньекции.
И еще чтоб меньше было гемора поменял Id стран на 0 и 1.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot