Полезная информация

В мире Mozilla происходит много интересных событий. Но вам не нужно постоянно посещать новостные сайты, чтобы быть в курсе всех изменений. Зайдите на ленту новостей Mozilla Россия.

№105-12-2011 01:50:35

futureFAvorit32
Участник
 
Группа: Members
Зарегистрирован: 04-06-2011
Сообщений: 5
UA: Opera 11.5

Помогите вызвать переданную ранее в класс функцию

Скрипт реализует паузу в выполнении посредством AJAX-запроса. После паузы (выполнения Ajax-запроса) должна вызываться переданная функция "AutomatBar_Callback.CheckCompleate", но её вызвать у меня не хватает ума и/или опыта. Помогите если не сложно.

Выделить код

Код:

var AutomatBar_Ajax = {
    httpRequest: null,
    OnRecive: null,
    Send: function (ActiveUrl, Message, OnReciveProc) {
        OnRecive = OnReciveProc; // может здесь неправильное присвоение ?
        
         if (window.XMLHttpRequest) { // Mozilla, Safari, ...
            httpRequest = new XMLHttpRequest();
        } else if (window.ActiveXObject) { // IE
            try {
                httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e) {
                try {
                    httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch (e) {}
            }
        }

        if (!httpRequest) {
            alert('Giving up :( Cannot create an XMLHTTP instance');
            return false;
        }
        httpRequest.onreadystatechange = this.alertContents;
        httpRequest.open('POST', ActiveUrl);
        httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        httpRequest.send(Message);        
        return true;
    },

    alertContents: function () {
        if (httpRequest.readyState === 4) {
            if (httpRequest.status === 200) {
                alert('AutomatBar_Ajax.alertContents - yes'); // alert показывает
                
                this.OnRecive(httpRequest.responseText); // <-- никак немогу вызвать !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                /* нерабочие попытки:
                OnRecive(httpRequest.responseText);
                this.OnRecive.OnRecive(httpRequest.responseText);
                OnRecive.OnRecive(httpRequest.responseText);
               */
            }
        }
    }
};

var AutomatBar_Tools = {
    /*
     * Пауза на заданное колличество секунд
     */
    Sleep: function (secs, OnReciveProc) {
        return AutomatBar_Ajax.Send('http://localhost:5080/tools/', 'sleep=' + secs, OnReciveProc);
    }
};

var AutomatBar_Callback = {
CheckCompleate: function(responseText){  // не могу вызвать функцию
alert('jhghjgjh');  
},

Start: function(){
    AutomatBar_Tools.Sleep(5, this.CheckCompleate);
}
};

AutomatBar_Callback.Start();

Если бы у людей были крылья, они бы... улетали на зиму в тёплые края.

Отсутствует

 

№205-12-2011 11:22:06

Shutnik
Участник
 
Группа: Extensions
Зарегистрирован: 12-11-2005
Сообщений: 3785
UA: Firefox 8.0

Re: Помогите вызвать переданную ранее в класс функцию

по-моему на вид в коде всё корректно. в консоли ошибок что-то пишется?

Отсутствует

 

№305-12-2011 11:44:43

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 9.0

Re: Помогите вызвать переданную ранее в класс функцию

futureFAvorit32
Перед присваиванием в 5-й строчке кода:

Выделить код

Код:

OnRecive = OnReciveProc; // может здесь неправильное присвоение ?

не хватает this - т.е. должно быть

Выделить код

Код:

this.OnRecive = OnReciveProc;

И вызывать нужно тоже через ссылку на this.

Отредактировано hydrolizer (05-12-2011 11:45:29)

Отсутствует

 

№406-12-2011 02:02:31

futureFAvorit32
Участник
 
Группа: Members
Зарегистрирован: 04-06-2011
Сообщений: 5
UA: Opera 11.5

Re: Помогите вызвать переданную ранее в класс функцию

Разрабатываю на FireFox (и JS) не так давно, всех инструментов не знаю.
консоли ошибок пишет только это:
Ошибка: ошибка синтаксиса
Источник: http://localhost:5080/tools/
Строка 1, символ 1
Исходный код:
ok
Веб-консоль тоже кроме Аякс-запроса ничего не показывает.
изменил код в соответствии с:

Выделить код

Код:

this.OnRecive = OnReciveProc;

И то-же семое.

наверное код:

Выделить код

Код:

httpRequest.onreadystatechange = this.alertContents;

заменю на:

Выделить код

Код:

httpRequest.onreadystatechange = OnReciveProc;

и будет так жить :)

Добавлено 06-12-2011 02:20:14
Нашёл глюк:

Выделить код

Код:

alertContents: function () {
        if (httpRequest.readyState === 4) {
            if (httpRequest.status === 200) {
                alert('AutomatBar_Ajax.alertContents - yes'); // alert показывает
                
                OnRecive('hhh'); // - работает
               //  OnRecive(httpRequest.responseText); // - не работатет, почему??????
            }
        }
    }

JS полон сюрпризов :)

Добавлено 06-12-2011 02:23:31
Всё... ПАШЕТ!!!!! :D

Выделить код

Код:

alertContents: function () {
        if (httpRequest.readyState === 4) {
            if (httpRequest.status === 200) {
                var m = httpRequest.responseText;
                OnRecive(m);
            }
        }
    }

Отредактировано futureFAvorit32 (06-12-2011 02:23:31)


Если бы у людей были крылья, они бы... улетали на зиму в тёплые края.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]