powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Проблема с Ajax в OnClick
3 сообщений из 3, страница 1 из 1
Проблема с Ajax в OnClick
    #36504825
Dennis2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем!

Товарищи, помогите кто чем может :). Стоит задача учета URL, на который посетитель переходит с текущей страницы. Для этого я пытаюсь использовать ajax в OnClick каждой ссылки страницы. Следующий код всем хорош, и отлично работает на компе, но не в интернете. Я так понимаю, что связанно это со скоростью интернета посетителя. Что мне надо сделать - мне надо выяснить, как приостановить переход пользователя по ссылке до того, как будет получен ajax-ответ (с максимальным сроком ожидания в секунду, например, ну или без него вовсе). Я читал много про синхронный и асинхронный ajax, но при синхронном ajax речь кругом идет о приостановки выполнения скрипта, а вот что делать, когда надо приостановить переход по ссылке непонятно. Если обратите внимание в коде есть переменная ret, в неё сохраняется значение возвращаемое возможной предыдущей функцией из OnClick, и в зависимости от нее срабатывает или не срабатывает ajax (так как если возвращается false, то посетитель реально не переходит по ссылке, а значит учитывать "переход" не стоит). По моему сельскому разумению OnClick выполняется ДО перехода по ссылке, и поскольку ajax-запрос у меня синхронный, то переход должен приостанавливаться подобно тому, как он приостанавливается, когда при OnClick вызывается обыкновенный alert(). Но почему-то переход срабатывает проскакивая мой ajax и не дожидаясь ответа.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
var bc_stat = new Object();
bc_stat.save = function()
{
	for (var i= 0 ; link = document.links[i]; i++) {
		link.onclick = function(x){
			return function(e){
				var ret = true;
				if (typeof x == 'function') ret = x();

				if (ret != false)
				{
					var targ;
					if (!e) var e = window.event;
					if (e.target) targ = e.target;
					else if (e.srcElement) targ = e.srcElement;
					if (targ.nodeType ==  3 ) // defeat Safari bug
						targ = targ.parentNode;

					bc_stat.ajaxRequest('ping-trackexitlink.php?url='+escape((window.decodeURI)?window.decodeURI(targ.href):targ.href)
						+'&'+Math.random());
				}

				return ret;
			}
		}(link.onclick);
	}
};

bc_stat.ajaxRequest = function(url)
{
	var xmlhttp;
	if ( window.XMLHttpRequest )
	{
		// code for IE7+, Firefox, Chrome, Opera, Safari
		xmlhttp=new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		// code for IE6, IE5
		xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	}

	xmlhttp.open('GET', url, false);
	xmlhttp.send(null);
};

bc_stat.save();

Как можно решить такую проблему? И вообще, можно ли?
...
Рейтинг: 0 / 0
Проблема с Ajax в OnClick
    #36504899
Dennis2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Буквально только-что набрел на литературу о событии OnBeforeUnload, которое, как утверждается, приостанавливает переход на URL до получения ответа от синхронного запроса ajax, но кажется он работает только в IE4+ и FF1.7+. Может это частично поможет решить задачу...
...
Рейтинг: 0 / 0
Проблема с Ajax в OnClick
    #36505701
Dennis2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разобрался немного с OnBeforeUnload и код чудесно работает в IE и FF, но как можно осуществить хотя бы частичную поддержку данной операции в Опере?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
var bc_stat = {
	exitlink: 'no exit link'
};

bc_stat.save = function()
{
	window.onbeforeunload = function(e)
	{
		if (!e) var e = window.event;
		bc_stat.ajaxRequest('ping-trackexitlink.php?url='+escape((window.decodeURI)?window.decodeURI(bc_stat.exitlink):bc_stat.exitlink)
			+'&'+Math.random());
	};

	for (var i= 0 ; link = document.links[i]; i++) {
		link.onclick = function(x){
			return function(e){
				var ret = true;
				if (typeof x == 'function') ret = x();

				if (ret != false)
				{
					var targ;
					if (!e) var e = window.event;
					if (e.target) targ = e.target;
					else if (e.srcElement) targ = e.srcElement;
					if (targ.nodeType ==  3 ) // defeat Safari bug
						targ = targ.parentNode;

					bc_stat.exitlink = targ.href;
				}

				return ret;
			}
		}(link.onclick);
	}
};

bc_stat.ajaxRequest = function(url)
{
	var xmlhttp;
	if ( window.XMLHttpRequest )
	{
		// code for IE7+, Firefox, Chrome, Opera, Safari
		xmlhttp=new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		// code for IE6, IE5
		xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	}

	xmlhttp.open('GET', url, false);
	xmlhttp.send(null);
};

bc_stat.save();
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Проблема с Ajax в OnClick
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]