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

Сервис обмена электронных валют


JS отправка get запроса при нажатии на div

#1 Scream

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

Отправлено 21 Апрель 2010 - 18:01

Помогите реализовать следующую задачу:

При нажатии на div1 вызывается функция in(), а на div2 вызывается функция out().
<div id="div1" style="display: block" onclick="in()">Вход</div>
<div id="div2" style="display: none" onclick="out()">Выход</div>

Какое должно быть содержание функции чтоб отправить GET запрос (на пример index.php?div=javascript)?

 

 

  • 0

#2 ZiTosS

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

Отправлено 21 Апрель 2010 - 20:19

Scream, с использованием framework'ов типа jQuery или без них?

Если без, то код будет громоздким
Во-первых, советовал бы выделить в отдельную функцию создание объекта xmlHttpRequest, на основе которого формируется запрос к серверу
function getXmlHttp(){
  var xmlhttp;
  try {
	xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
	try {
	  xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	} catch (E) {
	  xmlhttp = false;
	}
  }
  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
	xmlhttp = new XMLHttpRequest();
  }
  return xmlhttp;
}
Во-вторых, реализация самой функции-обработчика, та что выполняет запрос на сервер:
// javascript-код функции-обработчика
function in() {
   // (1) создать объект для запроса к серверу
   var req = getXmlHttp()  
	
   req.onreadystatechange = function() {  
	  // onreadystatechange активируется при получении ответа сервера

	  if (req.readyState == 4) { 
		 // если запрос закончил выполняться
		 if(req.status == 200) { 
			// если статус 200 (ОК) - выдать ответ пользователю
			alert("Ответ сервера: "+req.responseText);
		 }
		 // тут можно добавить else с обработкой ошибок запроса
	  }

   }

   // (2) задать адрес подключения
   req.open('GET', 'index.php?div=javascript', true);

   // объект запроса подготовлен: указан адрес и создана функция onreadystatechange
   // для обработки ответа сервера
	 
   // (3)
   req.send(null);  // отослать запрос
}

То есть в вашем примере, при клике по первому блоку, будет вызвана функция in(), внутри которой происходит асинхронное обращение к серверу(асинхронное - значит процесс не ждёт пока сервер вернет ответ обратно, а продолжает свою работу, как только ответ сформирован и отослан, процесс прерывается для обработки пришедшего ответа). В результате исполнения функции при удачном запросе к серверу и положительном ответе (статус HTTP 200) в ответ мы получим Alert с текстом:

Ответ сервера: [и далее весь текст сформированный файлом, к которому мы обращались с запросом]

!Замечание, тут приведен простейший пример, технология Ajax не ограничивается подобными запросами и данной обработкой ответа. Существует множество способов получения ответа в различных других форматах, например XML или JSON. Конечно всё это не структуризовано, как при использовании FrameWork'ов, но работает :rolleyes:
  • 0

#3 gaaarfild

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

Отправлено 21 Апрель 2010 - 22:56

А вообще, почитай немного jQuery или MooTools. Это настолько просто и быстро, вместо того, чтобы писать кривые функции AJAX, которые где-то работают, а где-то глючат, достаточно написать 2-3 строчки в этих фреймворках и наслаждаться. =) Красота =) Я как начал их использовать, влюбился и больше ни за что не хочу своими руками изобретать кривой трамвай, когда все ездят на прямых! =)
  • 0


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