Вопрос по 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 , никто не припомнит что это такое ?
ЗЫ: Сотый пост )))



