Перейти к содержимому


Партнерская программа Kredov

Работа с переменными Javascript

#1 mawa

mawa
  • Пользователь
  • 5 сообщений
  • Репутация: 0
0

Отправлено 11 Март 2009 - 22:16

Подскажите пожалуйста, имеется 2 Selecta:
При выборе 1-го Selecta, отображается 2-й Select, и в него на основании 1-го сэлэкта считывается данные из БД и выводятся во 2-м сэлэкте!
$a=vuvod_select('select id,BMW from select_marka');
Вместо BMW, нужно вставить переменную явыскрипт s_marka.

Я пытался сделать через куки, но пхп считает куки как бы на шаг позже: было 6, затем 45, а пхп считывает только 6!
пробывал через url, через GEt все считывается отлично, но при записи явойскрипт обновляется страничка и вся форма сбивается.
Знаю, что надо через ajax, но незнаю как!
Подскажите кто знает!
Спасибо!

 

 

  • 0

#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 12 Март 2009 - 10:26

Хех вы хотите чтобы мы в PHP вставили JS? У нас этого не получится. Я вам напишу простой пример с Ajax но только позже...
  • 0

#3 mawa

mawa
    Topic Starter
  • Пользователь
  • 5 сообщений
  • Репутация: 0

Отправлено 12 Март 2009 - 17:23

Хорошо, жду с не терпением!
главное мне как-то значение переменной передать !
  • 0

#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 14 Март 2009 - 10:15

Вот как и обещал работа с Ajax для вашего примера, конечно я накатал на скорую руку, а так многие параметры можно передавать в функцию и работать с ними, а не каждый раз искать элемент с нужным нам ID.

<html>
<head>
<script type="text/javascript">

/* функция создания объекта XMLHttpRequest и выполнение запроса*/
function makeRequest(url) {

  // создание объекта для разных браузеров
  var http_request = false;
  if (window.XMLHttpRequest)
  {
	http_request = new XMLHttpRequest();
	if (http_request.overrideMimeType)
	{
	  http_request.overrideMimeType('text/xml');
	}
  } else if (window.ActiveXObject) {
	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;
  }
	 var id = document.getElementById("select1").value; //значение выбранное в первом селекте(марка)
	 if(id != 0) // Если выбран НЕ первый пункт
	 {
		http_request.onreadystatechange = function() { alertContents(http_request); }; // функция-обработчик
		http_request.open('GET', url+"?id="+id, true); //сам запрос в виде ("тип_запроса", "адрес", "асинхронность")
		http_request.send(null); //отправка дополнительных параметров
	 } else {
		document.getElementById("mySelect").disabled = true; // если выбрали первый пункт закрываем селект
	 }
}

//функция возвращения и обработки результата
function alertContents(http_request) {
  if (http_request.readyState == 4) // если состояние "выполнено"
  {
	if (http_request.status == 0 || http_request.status == 200) // если не возвращено никакой ошибки
	{
		var mySelect = document.getElementById("mySelect"); // select с id="mySelect"
		mySelect.disabled = false; // делаем его возможным к выбору
		mySelect.innerHTML = http_request.responseText; //возвращаем в селект результат.
	} else {
	  return false;
	}
  }
}

</script>
</head>

<!-- при загрузке документа -->

<body onLoad="makeRequest('./ajax.php')">

<!-- при выборе какого-либо пункта -->

<select id="select1" onChange="makeRequest('./ajax.php')">
	<option value="0">Марка</option>
	<option value="1">Lada</option>
	<option value="2">BMW</option>
</select>

<br><br>

<select id="mySelect" disabled="true">
	<option value="0">Модель</option>
</select>
</body>
</html>

файл к которому идёт ajax запрос, в данном случае это PHP файл(ajax.php)
<?php
header('Content-Type: text/html; charset=windows-1251');

switch(intval($_GET['id'])){

	case 1:
?>
	<option value="1">Калина</option>
	<option value="2">3110</option>
	<option value="3">Копейка</option>
<?
	break;

	case 2:
?>
	<option value="1">MX3</option>
	<option value="2">MX5</option>
<?
	break;

	default:
	break;
}

?>
Как видите я формирую <option> в зависимости от присланного скриптом ID, так эе можно работать и с базой ;)
  • 0

#5 mawa

mawa
    Topic Starter
  • Пользователь
  • 5 сообщений
  • Репутация: 0

Отправлено 16 Март 2009 - 08:45

спасибо!
  • 0

#6 mawa

mawa
    Topic Starter
  • Пользователь
  • 5 сообщений
  • Репутация: 0

Отправлено 18 Май 2009 - 12:49

ZiTosS, Ваш код работает только в Mozilla и Opera. А подскажите пожалуйста почему он не работает под IE. Второй select становится активным, но список туда не подгружается (select - пуст).
  • 0

#7 v1ex

v1ex
  • Пользователь
  • 225 сообщений
  • Репутация: 0

Отправлено 18 Май 2009 - 13:10

mawa, http://www.w3schools...ax_browsers.asp в помощь.
  • 0

#8 mawa

mawa
    Topic Starter
  • Пользователь
  • 5 сообщений
  • Репутация: 0

Отправлено 18 Май 2009 - 14:44

У меня точно так!
Вот код:
function makeRequest(url) 
				{
				//var response_1=false;
				 // создание объекта для разных браузеров
				 var http_request = false;
				 if (window.XMLHttpRequest)
					{
					alert("opera");
					http_request = new XMLHttpRequest();
					if (http_request.overrideMimeType)
						{
						http_request.overrideMimeType('text/xml');
						}
					}
				else if (window.ActiveXObject) 
					{
					try 
						{
						alert("IE_1");
						http_request = new ActiveXObject("Msxml2.XMLHTTP");
						} 
					catch (e) 
						{
						try 
							{
							alert("IE_2");
							http_request = new ActiveXObject("Microsoft.XMLHTTP");
							} 
						catch (e) {}
						}
					}

				  // если объект не создан
				  if (!http_request)
					{
					alert('Не вышло  Невозможно создать экземпляр класса XMLHTTP '); // выдаём сообщение.
					return false;
					}
					 var id = document.getElementById("select1").value; //значение выбранное в первом селекте(subject)
					 if (id != 0) // Если выбран НЕ первый пункт
						{
						http_request.onreadystatechange = function() { alertContents(http_request); }; // функция-обработчик
						http_request.open('GET', url+"?id="+id, true); //сам запрос в виде ("тип_запроса", "адрес", "асинхронность")
						http_request.send(null); //отправка дополнительных параметров
						} 
					else 
						{
						document.getElementById("mySelect").disabled = true; // если выбрали первый пункт закрываем селект
						}					
					//-----------------------------------
				}
				//функция возвращения и обработки результата
			function alertContents(http_request) 
				{
				if (http_request.readyState == 4) // если состояние "выполнено"
					{
					if (http_request.status == 0 || http_request.status == 200) // если не возвращено никакой ошибки
						{
						var mySelect = document.getElementById("mySelect"); // select с id="mySelect"
						
						//response_1=true;
						mySelect.disabled = false; // делаем его возможным к выбору
						mySelect.innerHTML = http_request.responseText; //возвращаем в селект результат.
						} 
					else 
						{
						return false;
						}
					}
				}
Работаю для IE_6. Выдает сообщение "IE_1", делается активным второй select и ВСЕ! Не могу понять в чем ошибка!
  • 0

#9 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 21 Май 2009 - 18:58

Попробуйте просто сделать текстовый файл к которому обращаемся и сделайте не присвоение
mySelect.innerHTML = http_request.responseText; //возвращаем в селект результат.
А просто
alert(http_request.responseText)
Мне просто кажется что IE не понимает что значит innerHTML у SELECT. Он тупой осёл...
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru