Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ajax. XMLHTTP 
:(
    Опции темы
SneG0K
Дата 14.3.2009, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



Есть такой код
Код

function getMainCats() {
    var req = getXmlHttp();  
    req.onreadystatechange = function() {
        if (req.readyState == 4) {
            if (req.status == '200') {
                var data = req.responseXml;
                return data;
            } else {
                return false;
            }
        }
    }
    req.open('GET', 'ajax.php?op=getMainCats', true);
    req.send(null);
}

Он почему-то всегда возвращает мне undenfined
Пробовал и полный путь к скрипту писать. и responeText использовать. И ничего.
Вот пример XML который возвращает сервер
Код

<mainCats>
<cat>
<id>12</id>
<title>Главная</title>
</cat>
</mainCats>

В чем может быть проблема?

Это сообщение отредактировал(а) SneG0K - 14.3.2009, 18:18
PM WWW Skype   Вверх
bars80080
Дата 14.3.2009, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



там случаем не req.responseXML; нужно?

и кстати, а заголовок у xml-ки есть?

Добавлено через 34 секунды
<mainCats>
−
<cat>

а что за минус?
PM MAIL WWW   Вверх
SneG0K
Дата 14.3.2009, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



Цитата(bars80080 @  14.3.2009,  17:07 Найти цитируемый пост)
и кстати, а заголовок у xml-ки есть?

да
<?xml version="1.0" encoding="utf-8"?>
Цитата(bars80080 @  14.3.2009,  17:07 Найти цитируемый пост)

а что за минус? 

Эт когда с браузера копировал

Это сообщение отредактировал(а) SneG0K - 14.3.2009, 18:24
PM WWW Skype   Вверх
unicross
Дата 14.3.2009, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 422
Регистрация: 15.6.2008

Репутация: 6
Всего: 53



SneG0K, то, что вы хотите сделать возможно только при синхронных запросах.
Например, так:
Код

function getMainCats() {
    var data = '';
    var req = getXmlHttp();
    if (!req) { return false; }
    req.onreadystatechange = function() {
        if (req.readyState == 4) {
            if (req.status == 200) {
                data = req.responseXML;
            } else {
                data = false;
            }
        }
    }
    req.open('GET', 'ajax.php?op=getMainCats', false);
    req.send(null);
    return data;
}


При асинхронных запросах это не получится.
Как вариант:
Код

   req.onreadystatechange = function() {
      razborRequest(req);
   };

А в функции razborRequest() уже разбирать ответ
Код

function razborRequest(link) {
   // Обрабатываем асинхронный запрос
   if (link.readyState == 4) {
      if (link.status == 200) { // Запрос успешно обработан
         var xml = link.responseXML;
         if (xml) {
            // Обрабатываем результат
         }
      }
      else {
         window.alert("Ошибка");
      }
   }
}

PM MAIL WWW   Вверх
SneG0K
Дата 14.3.2009, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



unicross, как-то не помогло
PM WWW Skype   Вверх
unicross
Дата 14.3.2009, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 422
Регистрация: 15.6.2008

Репутация: 6
Всего: 53



SneG0K, покажите полностью ваш код. Который не получился. Если публиковать не хочется можно в личку...
PM MAIL WWW   Вверх
SneG0K
Дата 14.3.2009, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



Код

function getXmlHttp(){
    var xmlhttp;
    try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
            xmlhttp = false;
        }
    }
    if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
        xmlhttp = new XMLHttpRequest();
    }
    return xmlhttp;
}

function parseRequest(req) {
    if (req.readyState == 4) {
        if (req.status == '200') {
            var data = req.responseText;
            return data;
        } else {
            return false;
        }
    }
}

function getMainCats() {
    var req = getXmlHttp();  
    req.onreadystatechange = function() {
        return parseRequest(req);
    }
    req.open('GET', 'ajax.php?op=getMainCats', true);
    req.send(null);
}

alert(getMainCats());

PM WWW Skype   Вверх
unicross
Дата 14.3.2009, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 422
Регистрация: 15.6.2008

Репутация: 6
Всего: 53



Цитата(SneG0K @  14.3.2009,  22:13 Найти цитируемый пост)
        if (req.status == '200') {
            var data = req.responseText;
            return data;

При асинхронных запросах это не получится.

Цитата(unicross @  14.3.2009,  20:05 Найти цитируемый пост)
         var xml = link.responseXML;
         if (xml) {
            // Обрабатываем результат
         }

Я советовал обработать результат в функции parseRequest(), а не возвращать его!!!
PM MAIL WWW   Вверх
SneG0K
Дата 14.3.2009, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



Всеравно undenfined  smile 
PM WWW Skype   Вверх
unicross
Дата 14.3.2009, 22:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 422
Регистрация: 15.6.2008

Репутация: 6
Всего: 53



Код

<html><head>
<script language="JavaScript">
<!--
function getXmlHttp() {
    var xmlhttp;
    try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
            xmlhttp = false;
        }
    }
    if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
        xmlhttp = new XMLHttpRequest();
    }
    return xmlhttp;
}

function getMainCats() {
    var data = '';
    var req = getXmlHttp();
    if (!req) { return false; }
    req.onreadystatechange = function() {
        if (req.readyState == 4) {
            if (req.status == 200) {
                data = req.responseXML;
            } else {
                data = false;
            }
        }
    }
    req.open('GET', 'ajax.php?op=getMainCats', false);
    req.send(null);
    return data;
}

function getMain() {
   var xml = getMainCats();
   if (typeof xml == 'object') {
      try {
         var otvet = xml.getElementsByTagName("cat");
         var id = otvet[0].getElementsByTagName("id")[0];
         var title = otvet[0].getElementsByTagName("title")[0];
         var msg = id.firstChild.data + "<br>" + title.firstChild.data;
         document.getElementById("otvet").innerHTML = msg;
      }
      catch (e) { alert('Проблема c XML'); } 
   }
   else {
      alert('Проблема');
   }
}

function getMainCats2() {
    var req = getXmlHttp();
    if (!req) { return false; }
    req.onreadystatechange = function() {
        parseRequest(req);
    }
    req.open('GET', 'ajax.php?op=getMainCats', true);
    req.send(null);
}

function parseRequest(req) {
    if (req.readyState == 4) {
        if (req.status == 200) {
            var xml = req.responseXML;
            try {
               var otvet = xml.getElementsByTagName("cat");
               var id = otvet[0].getElementsByTagName("id")[0];
               var title = otvet[0].getElementsByTagName("title")[0];
               var msg = id.firstChild.data + "<br>" + title.firstChild.data;
               document.getElementById("otvet2").innerHTML = msg;
            }
            catch (e) { alert('Проблема c XML'); } 
        } else {
            window.alert("Ошибка");
        }
    }
}

//-->
</script>
</head><body>
<input type="button" value="Отправить синхронно" onclick="getMain();"><br>
<div id="otvet"></div>
<input type="button" value="Отправить асинхронно" onclick="getMainCats2();"><br>
<div id="otvet2"></div>
</body></html>

Файл ajax.php
Код

<?php
header('Content-Type: text/xml; charset=utf-8');
echo '<?xml version="1.0" encoding="utf-8" ?>', "\n";
?>
<mainCats>
<cat>
<id>12</id>
<title>Главная</title>
</cat>
</mainCats>


Добавлено

Где-то читал, что при синхронных запросах может не вызываться функция, указанная в onreadystatechange.
Поэтому лучше, наверно, функцию getMainCats() заменить на эту:
Код

function getMainCats() {
    var req = getXmlHttp();
    if (!req) { return false; }
    req.open('GET', 'ajax.php?op=getMainCats', false);
    req.send(null);
    if (req.readyState == 4 && req.status == 200) {
       return req.responseXML;
    } else {
       return false;
    }
}



Это сообщение отредактировал(а) unicross - 14.3.2009, 23:39
PM MAIL WWW   Вверх
SneG0K
Дата 14.3.2009, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



unicross, ок. Спасибо smile Завтра уже проверю smile
PM WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0618 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.