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

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

Код: 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
Передача переменной js
    #35368321
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пиши по-человечески. Тебе ответят.
...
Рейтинг: 0 / 0
Передача переменной js
    #35368322
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПС. В твоём коде, где половина закомментирована никто разберараться не будет.
...
Рейтинг: 0 / 0
Передача переменной js
    #35368354
shiftee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShSergeПиши по-человечески. Тебе ответят.

А где тут не по человечески?
...
Рейтинг: 0 / 0
Передача переменной js
    #35368360
apapacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Передача переменной js
    #35368396
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
apapacy shiftee ShSergeПиши по-человечески. Тебе ответят.
А где тут не по человечески?
Все у Вас правильно откоментирвано.
подозреваю что не в комментариях дело. Меня вот фраза "выдавать по 2, сдвигая при нажатии на ссылку вниз" повергает в ступор даже после пяти прочтений.

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

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

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

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


Далее если их количество больше 2, то:
...
Рейтинг: 0 / 0
Передача переменной js
    #35368430
shiftee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
Передача переменной js
    #35368431
shiftee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторИ осторожнее с document.write(act).

Это чисто для себя. Забыл убрать
...
Рейтинг: 0 / 0
Передача переменной js
    #35368476
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Передача переменной js
    #35370637
shiftee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
illion , я с яваскриптами не очень дружу. Вся проблема у меня заключается в передаче переменной от функции к функции. Почему-то return не всегда помогает... Если объявление переменной как глобальной поможет в передаче, то код я как-нибудь вылежу :)
...
Рейтинг: 0 / 0
Передача переменной js
    #35370684
shiftee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так вот сделал:

Код: 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
Передача переменной js
    #35370757
shiftee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так... понял почему :) Без xmlHttp.open("GET", "quickstart.php?pid=" + pid, true); он ничего не сформирует :)
...
Рейтинг: 0 / 0
Передача переменной js
    #35373682
shiftee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ура! все получилось. Кроме 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
Передача переменной js
    #35373691
shiftee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ко второму пункту: в ИЕ к созданным дивам никак не присоединяется class = 'hdiv1' и 'hdiv2' :(
...
Рейтинг: 0 / 0
Передача переменной js
    #35373695
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Передача переменной js
    #35373701
shiftee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор1. хз. Попробуйте отследить (alert'ами, например) по каким newId он пытается пройти и все ли элементы document.getElementById(removeObj) существуют.

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

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

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

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

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

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

и эту тоже:

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

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

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

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


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