Javascript-форум (https://javascript.ru/forum/)
-   Библиотеки/Тулкиты/Фреймворки (https://javascript.ru/forum/library-toolkit-framework/)
-   -   Отправить данные с контейнера (XMLHttpRequest) (https://javascript.ru/forum/library-toolkit-framework/13322-otpravit-dannye-s-kontejjnera-xmlhttprequest.html)

vladikas 26.11.2010 00:08

Отправить данные с контейнера (XMLHttpRequest)
 
Имеется пример кода с формой и контейнером. С формы данные успешно отправляются на скрипт test1.php и возвращаются в контейнер без перезагрузки страницы. Нужно отправить данные с контейнера (или это может быть тег гиперссылки). Не получается... Получаю undefined в ответе. Клик на контейнер с вызовом функции find2() должен послать данные на test2.php. Как это сделать?

main.htm
<html>
<head>
<script src="JsHttpRequest.js"></script>
<script language="JavaScript">
function find1() 
		{
        JsHttpRequest.query
			(
            'test1.php', // backend
			{
			'pass': document.getElementById("pass").value
			},

            function(result) 
				{
                document.getElementById("ans1").innerHTML = result["str1"];
				},
				true  // disable caching
			);
		};
	    
function find2() 
		{
        JsHttpRequest.query
			(
            'test2.php', // backend
			{
			'name': document.getElementById("name").value
			},

            function(result) 
				{
                document.getElementById("ans2").innerHTML = result["str2"]
				},
            true  // disable caching
			);
		}
</script>
</head>
<body>

<div style="cursor: pointer" id="name"  value="данные для ans2" onclick="find2()">
Нажать тут для срабатывания find2()
</div>

<br>
<form method="post">
Пароль:
<br>
<input name="pass" type="text" size="18" id="pass">
<br>
<input type="button" value="Отправить" onclick="find1()">
</form>

<div id="ans1">
Тут будет результат ans1
</div>

<div id="ans2">
Тут будет результат ans2
</div>
</body>


test1.php
<?php
require_once "JsHttpRequest.php";
$JsHttpRequest =& new JsHttpRequest("windows-1251");

$pass = $_REQUEST['pass'];//получаем из формы

$echo .= '<div>'.$pass.'</div>';//это будем выводить

    $GLOBALS['_RESULT'] = array(//создаёт массив в ответ
      "str1"   => $echo,//отправляем ответ
    );
?>


test2.php
<?php
require_once "JsHttpRequest.php";
$JsHttpRequest =& new JsHttpRequest("windows-1251");

$name = $_REQUEST['name'];//получаем из контейнера

$echo .= '<div>'.$name.'</div>';//это будем выводить

    $GLOBALS['_RESULT'] = array(//создаёт массив в ответ
      "str2"   => $echo,//отправляем ответ
    );
?>

`p r o x y 26.11.2010 11:35

document.getElementById("name").value

<div style="cursor: pointer" id="name"  value="данные для ans2" onclick="find2()">

Соответсвенно нужно использовать не .value, а .....?

vladikas 26.11.2010 11:59

В том то и дело, что я не знаю. Подскажите.

`p r o x y 26.11.2010 12:03

Тогда все ясно.

document.getElementById("name").value

применяется для получения данных из input и texarea, select, и т.д. элементов HTML у которых вообще может быть value.

У div может быть value?
Нет, поэтому применяется innerHTML.

Домашнее задание: исправить ошибку самостоятельно.

vladikas 26.11.2010 12:09

Мегаспасибо. Заработало.

vladikas 26.11.2010 15:55

Ещё вопрос образовался. Можно ли динамически менять id контейнера? Типа
<a onmouseover="this.id='idForText'" onmouseout="this.id='null'" onclick="find2()">Тут какой-то текст</a>

На странице много таких блоков, нужно, чтоб id="idForText" было только у того, на который я нажимаю и его уже искала функция find2().
--------------------
Похоже при post передаче происходит перевод в нижний регистр, из за этого не срабатывает. Только начал яваскрипт изучать, могу на элементарном спотыкаться....

`p r o x y 26.11.2010 16:28

Цитата:

Можно ли динамически менять id контейнера?
1. Не "контейнера", а HTML-тега или элемента.
2. Да можно.
3. Если много, то проще будет отправлять ссылку (т.е. node) на данный элемент в функцию.
<a href="#" onclick="find2(this); return false;">Тут какой-то текст</a>

function find2(obj){
  alert(obj.innerHTML);
}

vladikas 26.11.2010 17:47

Спасибо за инфу.
Сумел запустить, своим способом:
onmouseover="this.id='idForText'"
Браузер что-ли глючил.


Часовой пояс GMT +3, время: 15:06.