Цитата:
подключаю его так: <script type="text/javascript" src="city.js"></script> скрипт начинался:
var HTTPReq = XMLHttpRequest ?
new XMLHttpRequest() :
new ActiveXObject("Microsoft.XMLHTTP");
изменил на:
try {
var HTTPReq = new XMLHttpRequest();
} catch(e) {
var HTTPReq = new ActiveXObject("Microsoft.XMLHTTP");
}
После изменений ,Опера 9.27 как работала корректно так и работает, а вот ИЕ7 при загрузке страницы - все ок, выбираю страну, он активирует селект с городами, но если я меняю страну список уже не обновляется, при этом ИЕ7 ошибок не выдает никаких, как будто все в порядке, просто данные не меняются :((( Возможно нужно какие то дополнительные заголовки добавлять? по типу нокеш или что то ещё? |
DieseL,
Попробуйте заменить строчку
HTTPReq.open("GET", "page.php?country="+contryList.value);
На
HTTPReq.open("GET", "page.php?country="+contryList.value+"&rand="+Math.random());
|
Андрей Параничев,
Спасибо огромное! Решил вопрос сам :) но не без Вас! З.ы. Если кому будет нужно/полезно/интересно говорите, пример скрипта выложу :) |
Андрей Параничев,
Скажите, а возможно ли как то модифицировать код чтобы при выборе во втором селекте пункт "Другой город", вместо селекта появлялась форма <input type=text> и внесенные в нее данные отправлялись на сервер в таком же виде как запрос на выборку? P/s/ ну а там уже скрипт пхп который добавляет в базу новый город... |
Уважаемый, Андрей Параничев!
Подскажите пожалуйса почему невыходит две подобные формы на одной страницы установить? Они конфликтуют друг с другом, естевственно имена функций/елементов изменены на другие во второй форме :(( |
Цитата:
|
ВотЪ (:
Файл index.php <script type="text/javascript" src="district.js"></script> Область: <select name="Area" style="width:130px" onchange="AreaList(this)"> <option value="0" selected="selected">Выбор</option> <option value="1">Крым</option> <option value="2">Киевская</option> <option value="3">Волынская</option> <option value="4">Одесская</option> </select> Районный центр: <select disabled="disabled" name="District_List" style="width:130px" id="District_List"> <option>Выбор</option> </select> Файл district.js
function District_makeRequest(url) {
http_request = false;
if (window.XMLHttpRequest)
{ // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType)
{
http_request.overrideMimeType('text/xml');
}
}
else if (window.ActiveXObject)
{ // IE
try
{
http_request = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{}
}
}
if (!http_request)
{
alert('Не получается отправить XMLHTTP запрос');
return false;
}
http_request.onreadystatechange = alertContents;
http_request.open('GET', url, true);
http_request.send(null);
}
function alertContents()
{
if (http_request.readyState == 4)
{
var Districties = eval("("+http_request.responseText+")");
// Заполняем список:
fillDistrict_List(Districties);
}
}
// Запоминаем выбранную страну, чтоб не
// дублировать запросы в будущем.
var selectedArea = null;
// Функция, вызываемая при изменении списка
// (при выборе страны)
function AreaList(AreaList)
{
// Если выбран "пустой" вариант - очищаем список:
if(AreaList.value === "")
{
clearDistrict_List();
return;
}
// Проверяем выбрана ли уже какая-то страна:
if(selectedArea !== null)
{
// Если выбрана, проверяем не текущая ли выбрана:
if(selectedArea == AreaList.value)
{
// Если текущая уже выбрана - делать нечего.
return;
}
}
// Если никакая не выбрана, или выбрана не текущая, ставим текущую.
selectedArea = AreaList.value;
// Далее запрашиваем сервер на предмет списка городов выбранной страны.
// Тут должна быть ваша страница php, её работа будет описана далее:
District_makeRequest("district_select.php?district="+AreaList.value+"&rand="+Math.random());
// После этого будет вызван обработчик (который мы писали ранее, так что выходим)
return true;
}
// Фукнция, которая добавляет элементы в список городов:
function fillDistrict_List(elements)
{
// elements передан в формате JSON, так что щас он - объект
// для начала очистим текущий список городов
clearDistrict_List();
// Уберём статус неактивен с элемента:
var District_List = document.getElementById("District_List");
District_List.disabled = false;
// Скидываем счётчик option'ов (1 - потому что первый элемент пуст)
var i = 1;
// Рассмотрим elements, в котором ключи это values, а значения - имена.
for(var key in elements)
{
// Создаём и добавляем элемент в список:
var District = new Option(elements[key], key, false, false);
District_List.options[i++] = District;
}
return true;
}
// Функция, которая очищает все элементы из второго списка:
function clearDistrict_List()
{
var District_List = document.getElementById("District_List");
// Такое очищение, походу, работает во всех браузерах нормально.
while (District_List.length > 0) District_List.options[0] = null;
District_List.options[0] = new Option('', 0, false, false);
// Установим его в неактивный
District_List.disabled = "disabled";
}
Файл district_select.php
if(!array_key_exists('district', $_GET)) die();
// Подключаемся к БД
mysql_connect("$user_host", "$user_name", "$user_pass");
mysql_select_db ("$user_base");
// Составляем безопасный запрос:
$query = sprintf("SELECT * FROM district WHERE area='%s'",
mysql_real_escape_string($_GET['district']));
// Выполняем запрос:
$result = mysql_query($query);
$output = array();
// Проходим циклом по результату
while($row = mysql_fetch_assoc($result))
{
$output[] = '"'.addslashes($row['id']).'": '.
'"'.addslashes($row['name']).'"';
}
// Выводим, если есть что выводить:
if(sizeof($output) > 0)
{
echo '{'. implode(',', $output) .'}';
}
|
Можно ли как то запихнуть в select option не используя при этом цикл на JavaScript. Например при клике на элемент select c сервера должны загрузиться значения options. Их много. Перебор в цикле ( new Options) займёт много времени. А innerHTML и outerHTML с select не работают корректно. И ещё вопрос такой: почему в ваших примерах используете HttpRequest ? У меня чешутся руки написать загрузку option-сов через динамически созданный тэг script. Будет ли это иметь какие нибудь негативные последствия ?
|
ну как бы пример добавления оптионсов на форуме точно есть, именно это я когдато уже спрашивал.. юзайте поиск
можно просто динамически создавать оптионсы |
Проблема
Попробовал реализовать предложенный код - в результате во втором окне select появляется только одно значение, хотя в базе их много.
Подскажите, в чем может быть загвоздка |
| Часовой пояс GMT +3, время: 04:27. |