и при етом кусок кода 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', и функци ничо не возращает
По логике она должна вернуть последнее присвоения переменной result, тоесть 'da'.
Но она всеравно возрвщает 'net'.
Даже есле убрать else {result='net';} то resul не присваевается 'da', и функци ничо не возращает
Спустя 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', непойму как алерт мог повлиять на выполнения функции.
На сколько я понял ты со мной соглашаешся што с наведенного примера функция do_on_server
должна вернуть 'da'. Но она возрвщает 'net'!!
Попробывал поставить alert(result) после условий, выводит два раза сообщения 'net' и возвращает 'da' без алерта возвращает 'net', непойму как алерт мог повлиять на выполнения функции.
Спустя 28 минут, 39 секунд (11.06.2007 - 21:16) vasa_c написал(а):
Функция do_on_server не должна возвращать ничего.
Она инициирует запрос к серверу, вешает на него обработчик и продолжает выполняться.
Когда с сервера придет ответ никто не знает. И придет ли он вообще.
Советую поразмышлять над словом "асинхронный" в аббревиатуре AJAX.
Она инициирует запрос к серверу, вешает на него обработчик и продолжает выполняться.
Когда с сервера придет ответ никто не знает. И придет ли он вообще.
Советую поразмышлять над словом "асинхронный" в аббревиатуре AJAX.
Спустя 2 часа, 57 минут, 49 секунд (12.06.2007 - 00:14) nickROMAnt написал(а):
согласен я допустил ошибку
тогда вопрос в другом, как остановить виполнения функции do_on_server
перед оператором (ретурн) пока не получим ответ от сервера.
тогда вопрос в другом, как остановить виполнения функции 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'ы там вообще нифик не нужны, я никак не могу догнать - что ты хочешь сделать-то?
по порядку
функция do_on_server():
1) открывает соединение
2) устанавливает на обработчик onreadystatechage функцию updatePage()
3) посылает запрос
функция updatePage срабатывает при изменении свойства readyState, несколько раз, пока оно не будет равно "4" (значит данные загружены), после чего выведет полученный текст в элемента id="k"
и всё.
Ведь код рабочий и никакие return'ы там вообще нифик не нужны, я никак не могу догнать - что ты хочешь сделать-то?
Спустя 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-ом
на обработчик собитий 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 - синхронный.
но при синхронном вешается браузер до поступления ответа. Если ответ не придет — браузеру кирдык.
Так что попробуй сделать асинхронно. Все так делают и не теряют ни универсальности, ни целостности.
true - асинхронный, false - синхронный.
но при синхронном вешается браузер до поступления ответа. Если ответ не придет — браузеру кирдык.
Так что попробуй сделать асинхронно. Все так делают и не теряют ни универсальности, ни целостности.
Спустя 2 часа, 38 минут, 36 секунд (12.06.2007 - 13:06) nickROMAnt написал(а):
xmlHttp.open("GET",window.location+'?data='+value,false);
так работает все как по маслу
даже обновить недаст??
так работает все как по маслу
Цитата
Если ответ не придет — браузеру кирдык.
даже обновить недаст??
Спустя 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. Я теперь все понял, спасибо всем .Буду чонибуть мудрить с асинхронним.
_____________