Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Передача переменной js / 21 сообщений из 21, страница 1 из 1
10.06.2008, 21:58
    #35368223
shiftee
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной js
Доброго.

Есть функция:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
function process(pid, act) {
	//Работа возможна только есть объект xmlHttp не занят
	if (xmlHttp.readyState ==  4  || xmlHttp.readyState ==  0 ) {
		//Обратиться к сценарию quickstart.php на сервере
		xmlHttp.open("GET", "quickstart.php?pid=" + pid, true);
		//определить метод, который будет обрабатывать ответы сервера
		xmlHttp.onreadystatechange = handleServerResponse;
		//Послать асинхронный запрос серверу
		xmlHttp.send(null);
	}
	else {
		//Если соединение занято, повторить попытку через  1  секунду
		setTimeout('process(pid, act)',  1000 );
	}
	return act;
}

В результате выполнения ее кроме асинхронного запроса к файлу xml должно еще возвратиться значение act , которая задается следующим образом:

Код: plaintext
<a href="#" onclick="process(1, 'down')">down</a></div>

После чего я ее использую вот где:

Код: 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.
function handleServerResponse(act) {
	var newid;
	if (!newid) newid =  0 ;
	//Продолжать только если транзакция с сервером завершена
	if (act == 'down') {
		movedown(newid);
		document.write(act);
	}
	if (xmlHttp.readyState ==  4 ) {
		//Значение  200  говорит о том, что транзакция прошла успешно
		if (xmlHttp.status ==  200 ) {
			//Извлечь XML, полученный от сервера
			xmlResponse = xmlHttp.responseXML;
			//Получить корневой элемент в структуре XML
			xmlRoot = xmlResponse.documentElement;
			//извлечь текстовое сообщение, находящееся в дочернем элементе узла response
			imgarr = xmlRoot.getElementsByTagName('img');
			if(imgarr.length >  2 ) countarr =  2 ;
			else countarr = imgarr.length;
			for (var i=newid; i < (countarr + newid); i++) {
				mess = '<img src="../../xides2/adm/' + imgarr.item(i).firstChild.data + '"/><br/>';
				ids = 'firstd'+i;
				document.getElementById(ids).innerHTML = mess;
			}
		}
		//код статуса HTTP, отличный от  200 , говорит о наличае ошибки
		else {
			alert("При обращении к серверу возникли ошибки:" + xmlHttp.statusText);
		}
	}
}

Проблема в том, что никак не могу выцепить эту act .... или может есть другое решение? Суть задачи состоит в том, чтобы вывести и файла xml значения из тегов <img> и выдавать по 2, сдвигая при нажании на ссылку вниз. Пока что получается вывести только первые 2 элемента.
...
Рейтинг: 0 / 0
11.06.2008, 00:07
    #35368321
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной js
Пиши по-человечески. Тебе ответят.
...
Рейтинг: 0 / 0
11.06.2008, 00:09
    #35368322
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной js
ПС. В твоём коде, где половина закомментирована никто разберараться не будет.
...
Рейтинг: 0 / 0
11.06.2008, 00:56
    #35368354
shiftee
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной js
ShSergeПиши по-человечески. Тебе ответят.

А где тут не по человечески?
...
Рейтинг: 0 / 0
11.06.2008, 01:03
    #35368360
apapacy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной js
shiftee ShSergeПиши по-человечески. Тебе ответят.

А где тут не по человечески?

Все у Вас правильно откоментирвано. Просто такие проггеры. например как я используют комментарии не так

Код: plaintext
1.
2.
//Если соединение занято, повторить попытку через  1  секунду
		setTimeout('process(pid, act)',  1000 );

а вот так
Код: plaintext
1.
2.
		//setTimeout('process(pid, act)',  1000 );
		setTimeout(function(){process(pid, act)},  1000 );

Хотя моя первая учительница говорила так:
1) каждая строка программы должна быть откомменирована
2) каждая строка программы должна быть оплачена.

(У мея пока что каждая вторая строка закомменирована)
...
Рейтинг: 0 / 0
11.06.2008, 02:26
    #35368396
illion
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной js
apapacy shiftee ShSergeПиши по-человечески. Тебе ответят.
А где тут не по человечески?
Все у Вас правильно откоментирвано.
подозреваю что не в комментариях дело. Меня вот фраза "выдавать по 2, сдвигая при нажатии на ссылку вниз" повергает в ступор даже после пяти прочтений.

shiftee , давайте по сути задачи проясним пару вопросов. Как Вы хотите организовать этот процесс? Запрос к серверу возвращает весь набор тегов img или только те два, которые сейчас нужно показать? Если возвращаются все теги, то это происходит единожды или при каждом нажатии на ссылку?

Не можете выцепить act - сделайте ее глобальной переменной. И осторожнее с document.write(act).
...
Рейтинг: 0 / 0
11.06.2008, 06:16
    #35368425
shiftee
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной js
авторshiftee, давайте по сути задачи проясним пару вопросов. Как Вы хотите организовать этот процесс? Запрос к серверу возвращает весь набор тегов img или только те два, которые сейчас нужно показать? Если возвращаются все теги, то это происходит единожды или при каждом нажатии на ссылку?

Запрос к серверу возвращает все теги img.

Код: plaintext
1.
imgarr = xmlRoot.getElementsByTagName('img');
if(imgarr.length >  2 ) countarr =  2 ;


Далее если их количество больше 2, то:
...
Рейтинг: 0 / 0
11.06.2008, 06:23
    #35368430
shiftee
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной js
Код: plaintext
1.
2.
3.
for (var i=newid; i < (countarr + newid); i++) {
				mess = '<img src="../../xides2/adm/' + imgarr.item(i).firstChild.data + '"/><br/>';
document.getElementById(ids).innerHTML = mess;

Вот тут выводится только 2 из них. Теперь на странице index.php, нажимая на кнопочку вниз, значения должны сдвинуться на 1 елиницу. Т.е. Если у нас в файле xml идет:

<response>
<img>1</img>
<img>2</img>
<img>3</img>
</response>

То вместо того чтобы показывать 1 и 2, покзывалось бы 2 и 3.

Для этого у сеня есть 2 функции: moveup и movedown, возвращающие newid = newid+1 или минус 1.
...
Рейтинг: 0 / 0
11.06.2008, 06:28
    #35368431
shiftee
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной js
авторИ осторожнее с document.write(act).

Это чисто для себя. Забыл убрать
...
Рейтинг: 0 / 0
11.06.2008, 07:48
    #35368476
illion
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной js
shifteeесть 2 функции: moveup и movedown, возвращающие newid = newid+1 или минус 1.
тогда приведите код в соответствие со сказанным. Сейчас Вы просто вызываете movedown(newid), не присваивая никому возвращаемое значение, и при этом newid - не глобальная переменная. Каждый раз при вызове handleServerResponse объявляется var newid и каждый раз ей устанавливается значение 0.

shifteeЗапрос к серверу возвращает все теги img.
...
выводится только 2 из них
правильно ли я понимаю, что каждый раз при нажатии на кнопку "вниз" с сервера возвращаются все теги img? Это выглядит нелогичным, тем более что Вы точно знаете, что будете использовать только два тега, а остальные получаются лишним грузом. Лучше бы сделать так: при нажатии на кнопку "вниз" увеличивать newid и в зависимости от этого значения возвращать именно те два тега, которые понадобятся. Или так: сходить за всеми тегами только один (первый) раз, а потом работать с полученным массивом imgarr в функциях moveup и movedown (тут получится чисто работа с массивом и DOM).
...
Рейтинг: 0 / 0
11.06.2008, 20:58
    #35370637
shiftee
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной js
illion , я с яваскриптами не очень дружу. Вся проблема у меня заключается в передаче переменной от функции к функции. Почему-то return не всегда помогает... Если объявление переменной как глобальной поможет в передаче, то код я как-нибудь вылежу :)
...
Рейтинг: 0 / 0
11.06.2008, 22:03
    #35370684
shiftee
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной js
Вот так вот сделал:

Код: 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.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
// JavaScript Document
var xmlHttp = createXmlHttpRequestObject();
var imgArray = handleServerResponse();
function createXmlHttpRequestObject() {
	//Дя хранения ссылки на объект
	var xmlHttp;
	//Если сценарий запущен под управлением IE
	if(window.ActiveXObject) {
		try {
			  xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch (e) {
			xmlHttp = false;
		}
	}
	//Если сценарий запущен под управлением ФФ или другого браузера
	else {
		try {
			xmlHttp = new XMLHttpRequest();
		}
		catch (e) {
			xmlHttp = false;
		}
	}
	//Вернуть созданый объект или вывести сообщение об ошибке
	if (!xmlHttp) {
		alert("Ошибка создания объекта xmlHttpRequest");
	}
	else {
		return xmlHttp;
	}
}

//Выполнить асинхронный запрос HTTP с помощью объекта xmlHttpRequest
function process(pid) {
	//Работа возможна только есть объект xmlHttp не занят
	if (xmlHttp.readyState ==  4  || xmlHttp.readyState ==  0 ) {
		//Обратиться к сценарию quickstart.php на сервере
		xmlHttp.open("GET", "quickstart.php?pid=" + pid, true);
		//определить метод, который будет обрабатывать ответы сервера
		xmlHttp.onreadystatechange = handleServerResponse;
		//Послать асинхронный запрос серверу
		xmlHttp.send(null);
	}
	else {
		//Если соединение занято, повторить попытку через  1  секунду
		setTimeout('process(pid)',  1000 );
	}
}
//Вызывается автоматически по прибытии сообщения от сервера
function handleServerResponse() {
	var imgArray;
	//Продолжать только если транзакция с сервером завершена
	if (xmlHttp.readyState ==  4 ) {
		//Значение  200  говорит о том, что транзакция прошла успешно
		if (xmlHttp.status ==  200 ) {
			//Извлечь XML, полученный от сервера
			xmlResponse = xmlHttp.responseXML;
			//Получить корневой элемент в структуре XML
			xmlRoot = xmlResponse.documentElement;
			//извлечь текстовое сообщение, находящееся в дочернем элементе узла response
			imgArray = xmlRoot.getElementsByTagName('img');
			if(imgArray.length >  2 )  countArray =  2 ;
			else countArray = imgArray.length;
			for (var i= 0 ; i < countArray; i++) {
				mess = '<img src="../../xides2/adm/' + imgArray.item(i).firstChild.data + '"/><br/>';
				ids = 'firstd'+i;
				document.getElementById(ids).innerHTML = mess;
			}
			//обновить текст сообщения на экране
			//document.getElementById('firstd').innerHTML = mess;
			//Повторить последовательность действий
			//document.getElementById('secdiv').innerHTML = pid;
			//setTimeout('process()',  1000 );
		}
		//код статуса HTTP, отличный от  200 , говорит о наличае ошибки
		else {
			alert("При обращении к серверу возникли ошибки:" + xmlHttp.statusText);
		}
	}
    return imgArray;
}

function movedown() {
	if(imgArray.length >  2 ) countArray =  2 ;
	else countArray = imgArray.length;
	newid = newid +  1 ;
	for (var i=newid; i < (countarr + newid); i++) {
		mess = '<img src="../../xides2/adm/' + globalImgArray.item(i).firstChild.data + '"/><br/>';
		ids = 'firstd'+i;
		document.getElementById(ids).innerHTML = mess;
	}
}

Результат:

if(imgArray.length > 2) countArray = 2;
imgArray has no properties

а почему?
...
Рейтинг: 0 / 0
11.06.2008, 23:59
    #35370757
shiftee
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной js
Так... понял почему :) Без xmlHttp.open("GET", "quickstart.php?pid=" + pid, true); он ничего не сформирует :)
...
Рейтинг: 0 / 0
15.06.2008, 23:44
    #35373682
shiftee
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной js
Ура! все получилось. Кроме 2х вещей:

1. Не получается кросс браузерность. Не подскажите почему в ФФ создает 2 элемента новых, а удаляет один? В то время как ИЕ прекрасно создает 2 новых и удаляет старые.
Код: 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.
function CreateGal() {
	newId +=  1 ;
	for (var i = (newId -  1 ); i < ( 2  + newId -  1 ); i++) {
		try {
			removeObj = 'img' + (i -  1 );
			mothObj = 'div' + (i -  1 );
			document.getElementById(mothObj).removeChild(document.getElementById(removeObj));
		}
		catch(e) {
			alert('Ошибка удаления предыдущей геометрии\n' + e);
		}
		createDiv = document.createElement('p');
	    createDiv.id = 'div'+i;
		document.getElementById('baseDiv1').appendChild(createDiv);		
	}
	if(imgArray.length >  2 )  countArray =  2 ;
	else countArray = imgArray.length;
	for (var i = (newId -  1 ); i < ( 2  + newId -  1 ); i++) {
		imgInc = document.createElement('IMG');
		imgInc.src = '../../xides2/adm/' + imgArray.item(i).firstChild.data;
		imgInc.id = 'img' + i;
		ids = 'div'+i;
		document.getElementById(ids).appendChild(imgInc);
		
	}
}

2. Как в ИЕ передать следующие строчки, работающие в ФФ:

Код: plaintext
1.
2.
par = document.createElement('div');
className = 'hdiv' + (i +  1 );
par.setAttribute('class', className);
...
Рейтинг: 0 / 0
16.06.2008, 00:03
    #35373691
shiftee
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной js
Ко второму пункту: в ИЕ к созданным дивам никак не присоединяется class = 'hdiv1' и 'hdiv2' :(
...
Рейтинг: 0 / 0
16.06.2008, 00:15
    #35373695
illion
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной js
1. хз. Попробуйте отследить (alert'ами, например) по каким newId он пытается пройти и все ли элементы document.getElementById(removeObj) существуют. Кстати, removeChild легче делать так:
Код: plaintext
1.
var removeObj = document.getElementById('img' + (i -  1 ));
removeObj.parentNode.removeChild(removeObj)

2.
Код: plaintext
par.className = 'hdiv' + (i +  1 );
...
Рейтинг: 0 / 0
16.06.2008, 00:30
    #35373701
shiftee
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной js
автор1. хз. Попробуйте отследить (alert'ами, например) по каким newId он пытается пройти и все ли элементы document.getElementById(removeObj) существуют.

Скажем так... при первом вызове он точно вернет ошибку. Т.к. элементы не были созданы до того как вызывается метод removeChild.
После окончательной загрузки функции у нас есть две картинки с id: img0 и img1. Далее я жму на ссылочку и снова вызываю эту функцию. При этом ИЕ удаляет img0 и img1 и создает img1 и img2,
а ФФ удаляет только img0 и создает img1 и img2... Но консоль, встроенная в ФФ не показывает ни одного предупреждения :(

алерт показывает следующее node was not found. Что это значит? нет img1?
...
Рейтинг: 0 / 0
16.06.2008, 00:33
    #35373705
shiftee
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной js
о!!!! Заработало после вставки:

Код: plaintext
1.
var removeObj = document.getElementById('img' + (i -  1 ));
removeObj.parentNode.removeChild(removeObj)

хм... большое спасибо :)
...
Рейтинг: 0 / 0
16.06.2008, 18:44
    #35375402
shiftee
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной js
Товарищи, меня снова убивает ослик...

Почму ИЕ не хочет обрабатывать эту строчечку?

par.setAttribute('onchange', 'javascript: disab()');

и эту тоже:

par.onchange = 'javascript: disab()';

Хотя родной ФФ отлично отрабатывает :(
...
Рейтинг: 0 / 0
16.06.2008, 18:57
    #35375431
shiftee
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной js
порешал...

par.onchange = function () {disab();};

apapacy , спасибо за идею.
...
Рейтинг: 0 / 0
16.06.2008, 22:49
    #35375740
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача переменной js
shiftee
var removeObj = document.getElementById('img' + (i - 1));
removeObj.parentNode.removeChild(removeObj)[/src]хм... большое спасибо :)
Это и называется "по-человечески". Типа, 2 строски - и понятно.
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Передача переменной js / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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