[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: AJAX
nickROMAnt
НЕПОНЯТНО почему при визове функции do_on_server она возвращает 'net'
и при етом кусок кода document.getElementById("k").value=text; удачно выполняется!!


function do_on_server(value) {
xmlHttp.open("GET",window.location+'?data='+value, true);
xmlHttp.onreadystatechange = updatePage;
xmlHttp.send(null);
return (result);
}

function updatePage() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
{var text=xmlHttp.responseText;
document.getElementById("k").value=text;
result='da';}
else
{result='net';}
}



Спустя 28 минут, 51 секунда (11.06.2007 - 19:09) Timok написал(а):
Код
xmlHttp.onreadystatechange = updatePage;

Событие onreadystatechange возникает при получении ответа сервера. После этого проверяется состояние (xmlHttp.readyState) и если оно == 4 и статус ответа сервер == 200, возвращается 'da'. Т.е. функция несколько раз вернёт 'net', а потом 'da'

Спустя 28 минут, 3 секунды (11.06.2007 - 19:37) nickROMAnt написал(а):
Функция не может вернуть несколько значений вряд.
По логике она должна вернуть последнее присвоения переменной result, тоесть 'da'.
Но она всеравно возрвщает 'net'.
Даже есле убрать else {result='net';} то resul не присваевается 'da', и функци ничо не возращает crying.gif angry.gif

Спустя 17 минут, 22 секунды (11.06.2007 - 19:54) Timok написал(а):
Цитата
Функция не может вернуть несколько значений вряд.

блин, ну это само собой. Но вызывается-то она несколько раз - потому что, повторяю, обработчик onreadystatechange срабатывает несколько раз. Поставь в самом конце функции (после всех условий) alert(result) и убедишься в этом.

Спустя 52 минуты, 57 секунд (11.06.2007 - 20:47) nickROMAnt написал(а):
Timok, я тебя прекрастно понимаю.

На сколько я понял ты со мной соглашаешся што с наведенного примера функция do_on_server
должна вернуть 'da'. Но она возрвщает 'net'!!

Попробывал поставить alert(result) после условий, выводит два раза сообщения
'net' и возвращает 'da' без алерта возвращает 'net', непойму как алерт мог повлиять на выполнения функции.


Спустя 28 минут, 39 секунд (11.06.2007 - 21:16) vasa_c написал(а):
Функция do_on_server не должна возвращать ничего.
Она инициирует запрос к серверу, вешает на него обработчик и продолжает выполняться.
Когда с сервера придет ответ никто не знает. И придет ли он вообще.
Советую поразмышлять над словом "асинхронный" в аббревиатуре AJAX.

Спустя 2 часа, 57 минут, 49 секунд (12.06.2007 - 00:14) nickROMAnt написал(а):
согласен я допустил ошибку unsure.gif

тогда вопрос в другом, как остановить виполнения функции do_on_server
перед оператором (ретурн) пока не получим ответ от сервера.

Спустя 4 часа, 3 минуты, 13 секунд (12.06.2007 - 04:17) Timok написал(а):
не пойму, что ты хочешь остановить?
по порядку
функция do_on_server():
1) открывает соединение
2) устанавливает на обработчик onreadystatechage функцию updatePage()
3) посылает запрос
функция updatePage срабатывает при изменении свойства readyState, несколько раз, пока оно не будет равно "4" (значит данные загружены), после чего выведет полученный текст в элемента id="k"
и всё.
Ведь код рабочий и никакие return'ы там вообще нифик не нужны, я никак не могу догнать - что ты хочешь сделать-то? unsure.gif

Спустя 5 часов, 45 минут, 24 секунды (12.06.2007 - 10:02) nickROMAnt написал(а):
представь себе форму где есть логин, пароль, выбор язика, и кнопочка го, назовем ее Enter.

на обработчик собитий onclick  я вешаю вот такой алгоритм:
1)скрыть форму Enter.
2)показать форму Load.
3)установить глобальную переменную Language.    //значения 'UA' 'RU' 'EN' я естественно с формы
   do_on_server("set_global_data('language','UA')")     //всавляю,просто для примера так написал.                                                                           
4)проверить есть ли такой логин и пароль в базе
  temp = 
do_on server("exsist('login','parol')")
5)скрыть форму Load.
6)есле temp = true Показать главную форму, есле нет показать форму с сообщениям.

Как видиш у мя етя функция универсальная. И нужно не допустить выполнения пункта 4 пока не будет выполнен пункт 3. Но так как AJAX асинхронный он посилает запрос и начинает виполнять пункт 4. Можно бы было остановится на пункте 3 а остальную часть алгоритма перенести в место которое
выполняется после получения ответа от сервера, но тогда теряется универсальность и целостность.
Поэтому нада остановить выполнения кода пока не получим ответа от сервера.
Получаем ответ сервера, возращаем результат переданих функций. Алгоритм продолжает работать.

Я так понял ето можно назвать синхронный 
AJAX-ом


Спустя 25 минут, 38 секунд (12.06.2007 - 10:28) vasa_c написал(а):
xmlHttp.open("GET",window.location+'?data='+value, true);
true - асинхронный, false - синхронный.
но при синхронном вешается браузер до поступления ответа. Если ответ не придет — браузеру кирдык.
Так что попробуй сделать асинхронно. Все так делают и не теряют ни универсальности, ни целостности.

Спустя 2 часа, 38 минут, 36 секунд (12.06.2007 - 13:06) nickROMAnt написал(а):
xmlHttp.open("GET",window.location+'?data='+value,false);
так работает rolleyes.gif  все как по маслу

Цитата
Если ответ не придет — браузеру кирдык.


даже обновить недаст??

Спустя 1 час, 10 минут, 52 секунды (12.06.2007 - 14:17) vasa_c написал(а):
Цитата
так работает rolleyes.gif все как по маслу

где? на локалке?

Спустя 4 часа, 59 минут, 54 секунды (12.06.2007 - 19:17) nickROMAnt написал(а):
да покачто на локальке.

Спустя 1 час, 6 минут, 33 секунды (12.06.2007 - 20:24) vasa_c написал(а):
Вот и как по маслу. А на сервере пойдут задержки. Хоть на полсекунды, а уже бесить пользователей будут.

Спустя 13 часов, 2 минуты, 15 секунд (13.06.2007 - 09:26) nickROMAnt написал(а):
Ok. Я теперь все понял, спасибо всем .Буду чонибуть мудрить с асинхронним.


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.