Вопрос по JavaScript , помогите !
659 сообщений
#15 лет назад
Пишу функцию возвращающую ответ с сервера .Функция setloadstate выводит статус соединения , я ее еще буду дорабатывать потом , мне она нужна для отладки .
Как видно из названия , первая функция loadUI должна загрузить интерфейс в div id="main" .
Только вместо него вылазит слово undefined , помогите советом .
function loadUI(){
var maindiv = document.getElementById('main');
var resp = sendqry('LI');
maindiv.innerHTML = resp;
}
//request functions
function setloadstate(state){
var ind = document.getElementById('load');
ind.innerHTML = 'Индикатор соединения : статус '+state;
}
function sendqry(qry) {
var server = 'ссылка;;
var http = createRequestObject();
if( http ){
http.open('get',server+qry);
http.onreadystatechange = function (){
if(http.readyState == 1){
setloadstate(1);
}
if(http.readyState == 2){
setloadstate(2);
}
if(http.readyState == 3){
setloadstate(3);
}
if(http.readyState == 4){
setloadstate(4);
return decodeURIComponent(http.responseText);
}
}
http.send(null);
}
else
{
setloadstate(0);
return 'Ошибка соединения !';
}
}
function createRequestObject(){
try { return new XMLHttpRequest() }
catch(e){
try { return new ActiveXObject('Msxml2.XMLHTTP') }
catch(e){
try { return new ActiveXObject('Microsoft.XMLHTTP') }
catch(e) { return null; }
}
}
}16382 сообщения
#15 лет назад
Что возвращает sendqry? вот тут var resp = sendqry('LI');Попытка писать в переменную resp то, что возвращает sendqry. Да только она ничего вам не вернет. Она выполнит запрос и при изменении состояния соединения будет дергать соответствующие вызовы setloadstate
659 сообщений
#15 лет назад
return decodeURIComponent(http.responseText);
при http.readyState==4 . Или
return 'Ошибка соединения !';
если обьект не создался .
16382 сообщения
#15 лет назад
Оу. сорри, не внимательно смотрел. Если просто вернуть http.responseText - что там? Если руками запросить формируемый url - что там?
659 сообщений
#15 лет назад
frig, если alert-ить вместо return-ить все нормально , выносит ответ сервера .
16382 сообщения
#15 лет назад
Думаю, что дело вот в чем. Та функция, в которой return decodeURIComponent(http.responseText); - это уже другая функция. Это не sendqry. Надо пересмотреть архитектуру. AJAX же асинхронный весь.
2989 сообщений
#15 лет назад
Цитата ("frig"):AJAX же асинхронный весь.:!:
Для начала вот это 4. maindiv.innerHTML = resp; надо убрать. Это не будет выполнено никогда.
А вместо вот этого 31 return decodeURIComponent(http.responseText);
написать что-то вроде
var myvar = decodeURIComponent(http.responseText);
maindiv.innerHTML = myvar;
104 сообщения
#15 лет назад
Xazzzi, у Вас " maindiv.innerHTML = resp;" выполняется когда еще не выполнен "sendqry('LI'
", т.е. нужно в функции "function loadUI(){ }" убрать строчку "maindiv.innerHTML = resp;" а в "function sendqry(qry) { }" добавить "document.getElementById('main'
.innerHTML=http.responseText;"
659 сообщений
#15 лет назад
Такс , пойду пробовать ...Вспоминается мне , что есть в джаваскриптак такая штука как this , никто не припомнит что это такое ?
ЗЫ: Сотый пост )))



