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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мистические приключения AJAX + объекты 
:(
    Опции темы
error
Дата 22.8.2007, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хотел сделать класс, который инкапсулирует xml-дерево с возможностью его асинхронной загрузки.

Пишу (только для IE, чтобы код был свосем короткий и понятный)
Код

<script>
function xmlTree()
{
    function loadXml(url, parameters)
    {
        xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
        xmlDoc.onreadystatechange = this.process;
        xmlDoc.open( "GET", url+"?"+parameters, true );
        xmlDoc.send( null );
    }
    
    function process()
    {
        if (xmlDoc.readyState!=4) { return; }
        this.a=10;
        alert(this.a);
    }
    

    this.a=0;
    this.process=process;
    this.loadXml=loadXml;
}

myTree=new xmlTree();
myTree.loadXml('ajax.php','');
</script>
<input type="button" onClick="alert(myTree.a)"/>


А дальше начинается та самая мистика. Дерево создается, данные с сервера получены, вызывается process(), выводится alert, там написано 10 - всё как надо.
Но когда потом жму на кнопу - все равно выводится 0.

Причем, если присваивание this.a=10 перенести из process() в loadXml(), то всё в порядке.

Просьба огромная помочь, если кто знает, в чем дело, потому что с ООП-костылями js я только сегодня познакомился.
PM MAIL   Вверх
BuShaRt
Дата 22.8.2007, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



AJAX только под IE? Вот уж точно мистка...
PM MAIL   Вверх
error
Дата 22.8.2007, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(BuShaRt @  22.8.2007,  14:35 Найти цитируемый пост)
AJAX только под IE? Вот уж точно мистка...


Я написал: 
Цитата

только для IE, чтобы код был свосем короткий и понятный

Тебе доставляет удовольствие просматривать лишний код, не имеющий отношения к проблеме? Если так, то это точно мистика.

UPD По задаче: 
Проблема была в том, что this в process() обращается не к нужному объекту myTree, а к объекту, для которого он является конструктором.


PM MAIL   Вверх
ksnk
Дата 23.8.2007, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Тут следует с замыканиями помудрить.
Что-то типа
Код

        var xxx = this
        xmlDoc.onreadystatechange = function(){xxx.process()};





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


 




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


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

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