Перейти к публикации
Дедовский городской форум
Maksim

Вопрос по Ajax, наверное или javascript

Рекомендованные сообщения

Ревью мыслей что-ли...

 

Есть такой код на странице:

<span style="display:none" id="doit-text"></span>
		<script type="text/javascript">
			document.write("<a href=\"#\" id=\"give_mark_to\" onclick=\"return giveMark('8429491', this);\" class=orange>Поставить оценку</a>");
		</script>
		<span id="rate-doit" style="display:none;float:left"><ul class="unit-rating">
			<li class="current-rating" style="width:70px">70</li>
			<li><a href="#" title="Плохо" class="r1-unit" onClick="return setRate('1', '8429491'); return false;">1</a></li>
			<li><a href="#" title="Приемлемо" class="r2-unit" onClick="return setRate('2', '8429491'); return false;">2</a></li>
			<li><a href="#" title="Средне" class="r3-unit" onClick="return setRate('3', '8429491'); return false;">3</a></li>
			<li><a href="#" title="Хорошо" class="r4-unit" onClick="return setRate('4', '8429491'); return false;">4</a></li>
			<li><a href="#" title="Отлично" class="r5-unit" onClick="return setRate('5', '8429491'); return false;">5</a></li>
		</ul></span>
		<span id="rate-complete" class="rate-complete" style="display:none">Спасибо, Ваш голос будет учтен!</span>
		<span id="rate-already" class="rate-already" style="display:none">Вы уже голосовали!</span>
		</div>					

	</div>

<script type="text/javascript">
		var visitor = getCookie("visitor_id");
		function giveMark(id, a) {
			var rand=parseInt((Math.random()*10000000));
			var params = "programm_id=" + id + "&visitor_id=" + visitor + "&" + rand;
			var url = "/ext/isscored/?" + params;
			var onload = giveMarkResult;
			var method = "GET";
			return setAjaxRequest(method, url, false, onload, false, false, false, a);
		}
		function giveMarkResult() {
			document.getElementById("give_mark_to").style.display = "none";
			if (this.req.responseText == 1) {
				document.getElementById("rate-already").style.display = "";
			} else {
				document.getElementById("doit-text").style.display = "";
				document.getElementById("rate-doit").style.display = "";
			}
			return false;
		}
		function setRate(mark, id) {
			var rand=parseInt((Math.random()*10000000));
			var params = "programm_id=" + id + "&visitor_id=" + visitor + "&rating=" + mark + "&" + rand;
			var url = "/ext/scored/?" + params;
			var onload = rateAnsHandler;
			return setAjaxRequest("GET", url, false, onload);
		}
		function rateAnsHandler() {
			switch (this.req.responseText) {
				case 'yes' :
					error = false;
					break;
				case 'error' :
					error = true;
					error_text = "В процессе обработки запроса произошла ошибка, попробуйте еще раз!";
					break;
				default :
					error = false;
					break;
			}
			if (error) {
				alert(error_text);
			} else {
				document.getElementById("doit-text").style.display = "none";
				document.getElementById("rate-doit").style.display = "none";
				document.getElementById("rate-complete").style.display = "";
			}
		}
	</script>

 

Вопросы-размышление в слух:

1. При загрузки страницы, сначала идет загрузка рейтинга через вызов функции giveMarkResult() и если visitor_id совпадает с тем что в куках то вылазит сообщение о пройденном голосовании и голосовать уже нельзя?

Т.е. проверка на повторное голосование сводиться к запросу вида:

/ext/isscored/programm_id=*ИДЕНТИФИКАТОР_ИТЕМА*&visitor_id=*ИДЕНТИФИКАТОР_ЮЗЕРА*&*ПСЕВДОСЛУЧАЙНОЕ_ЧИСЛО*

смотрю в снифере:

HTTP/1.1 200 OK
Server: nginx
Date: Fri, 22 Jun 2012 12:40:11 GMT
Content-Type: text/html; charset=windows-1251
Connection: keep-alive
Content-Length: 1

0

значит не голосовал? А если один - голосовал?

2. Допустим visitor_id не совпал, и мы попали в setRate, запрос к серверу выглядит так:

/ext/scored/programm_id=*ИДЕНТИФИКАТОР_ИТЕМА*&visitor_id=*ИДЕНТИФИКАТОР_ЮЗЕРА*&rating=*ВЫБРАННЫЙ_РЕЙТИНГ*&*ПСЕВДОСЛУЧАЙНОЕ_ЧИСЛО*

3. Последняя строчка return setAjaxRequest("GET", url, false, onload); - это из фрейморка ихнего, а последний аргумент это типа callback-функция rateAnsHandler?

4. и она опять удаляет элемент который сама голосовалка?

Т.е. при загрузки страницы сначала проверяется голосовал ли пользователь, если да - голосовалка убирается, если нет - она есть, пользователь выбирает рейтинг и запускается этот самый запрос из пункта 2?

5. Смотрю в снифере:

HTTP/1.1 200 OK
Server: nginx
Date: Fri, 22 Jun 2012 12:31:19 GMT
Content-Type: text/html; charset=windows-1251
Connection: keep-alive
Content-Length: 1
1

это значит ЧТО? Что я удачно проголосовал? ВОЗВРАЩАЕТСЯ ЕДИНИЦА и ОК?????!!!!!1111*бьет по клаве*

 

Господа, любые мысли с радостью прочитаю

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Позднова-то я увидел пост.

Для тех кто не понял что же тут такое поясню:

При обработке страницы создаётся AJAX запрос функцией giveMark(id, a)

Нафига в ней заюзана перепенная а не знаю, нужно порыть гугл апи.

Этот запрос вызывает функцию giveMarkResult(), которая отвечает за отображение элементов в зависимости от ответа (при ответе 1 он отображет span id=rate-already)

Ajax запрос же посредством GET переменных передают на сервер вот такие данные:

programm_id= id (id он получает из

<script type="text/javascript">

document.write("<a href=\"#\" id=\"give_mark_to\" onclick=\"return giveMark('8429491', this);\" class=orange>Поставить оценку</a>");

</script>

То есть посути id зашит в страницу и формируется на ней при создании этой самой страницы.)

visitor_id= visitor

 

var visitor = getCookie("visitor_id") - тут всё понятно, хватает из куков.

Плюс некое рандомное число, для чего оно используется, хз, наверно какая-то соль, или что бы враг не догадался.)

Ну дальше идёт голосовалка)

 

Ответы на вопросы:

1. При загрузки страницы, сначала идет загрузка рейтинга через вызов функции giveMarkResult() и если visitor_id совпадает с тем что в куках то вылазит сообщение о пройденном голосовании и голосовать уже нельзя?

Т.е. проверка на повторное голосование сводиться к запросу вида:

Код

/ext/isscored/programm_id=*ИДЕНТИФИКАТОР_ИТЕМА*&visitor_id=*ИДЕНТИФИКАТОР_ЮЗЕРА*&*ПСЕВДОСЛУЧАЙНОЕ_ЧИСЛО*

 

смотрю в снифере:

Код

HTTP/1.1 200 OK
Server: nginx
Date: Fri, 22 Jun 2012 12:40:11 GMT
Content-Type: text/html; charset=windows-1251
Connection: keep-alive
Content-Length: 1

0

значит не голосовал? А если один - голосовал?

 

В данном конексте именно так

3. Последняя строчка return setAjaxRequest("GET", url, false, onload); - это из фрейморка ихнего, а последний аргумент это типа callback-функция rateAnsHandler?

 

Да это именно callback функция в апи гугла. В данном случаи первые 4ре переменные повторяют стандратный Httprequest из js.

 

 

5. Смотрю в снифере:

Код

HTTP/1.1 200 OK
Server: nginx
Date: Fri, 22 Jun 2012 12:31:19 GMT
Content-Type: text/html; charset=windows-1251
Connection: keep-alive
Content-Length: 1
1

 

это значит ЧТО? Что я удачно проголосовал? ВОЗВРАЩАЕТСЯ ЕДИНИЦА и ОК?????!!!!!1111*бьет по клаве*

 

Из ходя из логики кода ситуация несколько иная.

Он проверяет была ли ошибка на стороне сервера.

При возвращении yes он считает что ошибки не было.

Если возвращается error то он считает, что произошла ошибка, и формирует сообщение.

Любой другой ответ принимает как удачный.

Еденица попадает под 3й вариант (Любой другой).

 

Все панимуляции со стилями элементов на странице производит JS на клиетской стороне.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

document.getElementById("give_mark_to").style.display = "none";
			if (this.req.responseText == 1) {
				document.getElementById("rate-already").style.display = "";
			} else {
				document.getElementById("doit-text").style.display = "";
				document.getElementById("rate-doit").style.display = "";
			}

 

В этом фрагменте программа ищет не в куках, а в объектной модели HTML-страницы DOM (Document Object Model).

 

http://javascript.ru/tutorial/dom/search#poisk-po-id

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

×
×
  • Создать...