Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2009, 11:31   #1
max38934
Пользователь
 
Регистрация: 04.02.2009
Сообщений: 43
По умолчанию AJAX - не подгружается ответ

Добрый день! Все время работал под Mozilla, решил запустить под IE - не хочет работать! Суть проблемы такова:
есть на страничке динамический select_1, результат которого должен подгружаться во второй select_2, ну а со второго - в третий. В Mozilla все работает отлично. Пробую в IE - после изменения в первом select_1 - второй становится активным, но пустым.
Вот код:
Код:
function makeRequest_5(url_5) 
				{
				 // создание объекта для разных браузеров
				 var http_request_5 = false;
				 if (window.XMLHttpRequest)
					{
					http_request_5 = new XMLHttpRequest();
					if (http_request_5.overrideMimeType)
						{
						http_request_5.overrideMimeType('text/xml');
						}
					}
				else if (window.ActiveXObject) 
					{
					try 
						{
						http_request_5 = new ActiveXObject("Msxml2.XMLHTTP");
						} 
					catch (e) 
						{
						try 
							{
							http_request_5 = new ActiveXObject("Microsoft.XMLHTTP");
							} 
						catch (e) {}
						}
					}

				  // если объект не создан
				  if (!http_request_5)
					{
					alert('Не вышло  Невозможно создать экземпляр класса XMLHTTP '); // выдаём сообщение.
					return false;
					}
					var id_5 = document.getElementById("select_5").value; //значение выбранное в первом селекте(subject)
					if (id_5 != 0) // Если выбран НЕ первый пункт
						{
						//alert(id_3);
						http_request_5.onreadystatechange = function() { alertContents_5(http_request_5); }; // функция-обработчик
						http_request_5.open('GET', url_5+"?id_5="+id_5, true); //сам запрос в виде ("тип_запроса", "адрес", "асинхронность")
						http_request_5.send(null); //отправка дополнительных параметров
						}
					else 
						{
						document.getElementById("select_6").disabled = true; // если выбрали первый пункт закрываем селект
						document.getElementById("select_7").disabled = true;
						//document.getElementById("select_8").disabled = true;
						//document.getElementById("select_8").style = "none";
						select_8.style.display="none";
						}
				}
			function alertContents_5(http_request_5) 
				{
				if (http_request_5.readyState == 4) // если состояние "выполнено"
					{
					if (http_request_5.status == 0 || http_request_5.status == 200) // если не возвращено никакой ошибки
						{
						var select_6 = document.getElementById("select_6"); // select с id="mySelect"
						
						select_6.disabled = false; // делаем его возможным к выбору
						select_6.innerHTML = http_request_5.responseText;
						} 
					else 
						{
						return false;
						}
					}
				}

Последний раз редактировалось max38934; 18.05.2009 в 15:46.
max38934 вне форума Ответить с цитированием
Старый 18.05.2009, 14:54   #2
cronfy
Пользователь
 
Регистрация: 09.10.2008
Сообщений: 92
По умолчанию

В Вашем примере очень сложно разобраться. Очень большое дублирование кода. Попробуйте вынести одинаковые действия в отдельную функцию и вызывать её, а не повторять каждый раз уже написанное в другом месте. И используйте js-фреймворки, они сильно облегчат Вам жизнь в работе с такими вот задачками, которые в веб-разработке встречаются постоянно. Вы обойдётесь несколькими строчками кода вместо громоздких функций.

По сути же — насколько я помню, в IE нельзя вот так взять и заменить innerHTML <select>'a списком опций. Нужно заменять целиком <select>. То есть нужно создать новый поноценный элемент <select>, удалить старый и вставить на его место новый.
SPRINTHOST.RU — вот, что я люблю ;-)
cronfy вне форума Ответить с цитированием
Старый 18.05.2009, 15:48   #3
max38934
Пользователь
 
Регистрация: 04.02.2009
Сообщений: 43
По умолчанию

Цитата:
Сообщение от cronfy Посмотреть сообщение
По сути же — насколько я помню, в IE нельзя вот так взять и заменить innerHTML <select>'a списком опций. Нужно заменять целиком <select>. То есть нужно создать новый поноценный элемент <select>, удалить старый и вставить на его место новый.
Можно, под Mozilla и Opera все прекрасно работает. Я пологаю что проблема в строке:
Код:
http_request = new ActiveXObject("Msxml2.XMLHTTP");
max38934 вне форума Ответить с цитированием
Старый 18.05.2009, 16:47   #4
cronfy
Пользователь
 
Регистрация: 09.10.2008
Сообщений: 92
По умолчанию

Цитата:
Сообщение от max38934 Посмотреть сообщение
Можно, под Mozilla и Opera все прекрасно работает.
Мы же, вроде, про IE говорим.

Цитата:
Я пологаю что проблема в строке:
Код:
http_request = new ActiveXObject("Msxml2.XMLHTTP");
Если бы проблема была там, работа скрипта заканчивалась бы на сообщении

Код:
alert('Не вышло  Невозможно создать экземпляр класса XMLHTTP ');
SPRINTHOST.RU — вот, что я люблю ;-)
cronfy вне форума Ответить с цитированием
Старый 18.05.2009, 18:21   #5
max38934
Пользователь
 
Регистрация: 04.02.2009
Сообщений: 43
По умолчанию

Ну так скажите, пожалуйста, в чем проблема!
max38934 вне форума Ответить с цитированием
Старый 18.05.2009, 19:30   #6
cronfy
Пользователь
 
Регистрация: 09.10.2008
Сообщений: 92
По умолчанию

Цитата:
Сообщение от max38934 Посмотреть сообщение
Ну так скажите, пожалуйста, в чем проблема!
Как я уже писал, дело в том, что в IE нельзя заменить innerHTML для select, нужно заменять select целиком.

При таком html-коде:

Код HTML:
<div id="select-container">
  <select id="test-select"></select>
</div>
Этот метод работать не будет:

Код:
    select = document.getElementById('test-select');
    select.innerHTML = '<option>Проверочка</option>';
А вот этот будет:

Код:
    selectContainer = document.getElementById('select-container');
    selectContainer.innerHTML = '<select id="test-select"><option>Проверочка</option></select>';
Это самый простой способ достигнуть желаемого. Можно ещё возвращать список опций в виде json или xml и по одной добавлять их к select'у, но повозиться придётся подольше.
SPRINTHOST.RU — вот, что я люблю ;-)
cronfy вне форума Ответить с цитированием
Старый 18.05.2009, 19:46   #7
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Конструкция $("#myid").load("/data.html?a=b&c=d"); заменяет все ваше пейсательство на N строк.
Юзайте jQuery!
SkyM@n вне форума Ответить с цитированием
Старый 18.05.2009, 20:59   #8
max38934
Пользователь
 
Регистрация: 04.02.2009
Сообщений: 43
По умолчанию

cronfy, а можно как то вместо
Код:
selectContainer.innerHTML = '<select id="mySelect"><option>Проверочка</option></select>';
вставить
Код:
selectContainer.innerHTML = http_request.responseText;
Этим ответом я возвращаю новый select, вот текст ответа:
Код HTML:
<select id="mySelect">
	<option value="0">0_0</option>
	<option value="1">1_1</option>
	<option value="2">2_2</option>
</select>
max38934 вне форума Ответить с цитированием
Старый 19.05.2009, 03:01   #9
cronfy
Пользователь
 
Регистрация: 09.10.2008
Сообщений: 92
По умолчанию

Цитата:
Сообщение от max38934 Посмотреть сообщение
cronfy, а можно как то вместо
Код:
selectContainer.innerHTML = '<select id="mySelect"><option>Проверочка</option></select>';
вставить
Код:
selectContainer.innerHTML = http_request.responseText;
Конечно можно, я именно к этому и подводил. А что, что-то не работает?
SPRINTHOST.RU — вот, что я люблю ;-)
cronfy вне форума Ответить с цитированием
Старый 19.05.2009, 10:35   #10
max38934
Пользователь
 
Регистрация: 04.02.2009
Сообщений: 43
По умолчанию

Да не работает! Выводит содержимое selecta как обычный текст на страницу, а не в воде selecta. Если писать как Вы писали в первый раз, то работает все отлично.
max38934 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ajax и сессии ADSoft PHP 7 23.01.2009 17:10
AJAX выводит не ту кодировку mogul82 JavaScript, Ajax 2 05.01.2009 19:27
ajax кодировка Iuliy JavaScript, Ajax 1 07.03.2008 19:38