powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / JS: в Ajax обработчике свойство родительского объекта не определено (исп Mootools)
7 сообщений из 7, страница 1 из 1
JS: в Ajax обработчике свойство родительского объекта не определено (исп Mootools)
    #36090818
Alex_BBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используя mootools Request создаю следующий объект:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
var AgencyManager = function(loader) {
    this._Loader = loader;  // индикатор загрузки
    this._GetMetroRequest;  // Ajax запрос на получение станций метро
    this._Init();
}
AgencyManager.prototype = {
    _OnGetMetroSuccess: function(response) {
        for (var i =  0 ; i < response.metros.length; i++) {
            alert(response.metros[i].name);
        }
        debugger;
        alert(this._Loader); // !!undefined!!
    },

    _Init: function() {
        this._GetMetroRequest = new Request.JSON({
            url: "/AjaxHandler.aspx", 
            onSuccess: this._OnGetMetroSuccess
        });
    },

    GetMetroStations: function() {
        this._GetMetroRequest.send();
    }
}

В качестве обработчика события возврата Ajax ответа от сервера на событие onSuccess вешаю метод своего объекта _OnGetMetroSuccess .
В _OnGetMetroSuccess пытаюсь получить свойство своего объекта и оно оказывается undefined.
Как быть?

Вот так тоже не работает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
var AgencyManager = function(loader) {
    this._Loader = loader;  // индикатор загрузки
    this._GetMetroRequest;  // Ajax запрос на получение станций метро
    this._Init();
}
AgencyManager.prototype = {
    _Init: function() {
        this._GetMetroRequest = new Request.JSON({
            url: "/AjaxHandler.aspx", 
            onSuccess: function(response) {
                alert(response.metros.length);
                alert(this._Loader); // !!undefined!!
            }
        });
    },

    GetMetroStations: function() {
        this._GetMetroRequest.send();
    }
}
...
Рейтинг: 0 / 0
JS: в Ajax обработчике свойство родительского объекта не определено (исп Mootools)
    #36090873
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    _Init: function() {
        var th = this;
        this._GetMetroRequest = new Request.JSON({
            url: "/AjaxHandler.aspx", 
            onSuccess: function(response) {
                alert(response.metros.length);
                alert(th._Loader); // !!undefined!!
                th=null; // навсякий
            }
        });
    }
...
Рейтинг: 0 / 0
JS: в Ajax обработчике свойство родительского объекта не определено (исп Mootools)
    #36090886
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ: В первом случае не работало, потому что в строке onSuccess: this._OnGetMetroSuccess
передавалась только функция, без всяких this, и вместо него подставлялся window (скорее всего)

Во втором случае this был тот, с которым вызвался onSuccess, а вовсе не this от _Init
...
Рейтинг: 0 / 0
JS: в Ajax обработчике свойство родительского объекта не определено (исп Mootools)
    #36090923
Alex_BBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечПопробуйте так:
Спасибо помогло.

Яростный МечЗЫ: В первом случае не работало, потому что в строке onSuccess: this._OnGetMetroSuccess
передавалась только функция, без всяких this, и вместо него подставлялся window (скорее всего)

Как быть если я все же хочу использовать первый вариант?
...
Рейтинг: 0 / 0
JS: в Ajax обработчике свойство родительского объекта не определено (исп Mootools)
    #36090991
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_BBBЯростный МечЗЫ: В первом случае не работало, потому что в строке onSuccess: this._OnGetMetroSuccess
передавалась только функция, без всяких this, и вместо него подставлялся window (скорее всего)

Как быть если я все же хочу использовать первый вариант?Можно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
// определяем "связывалку" функции с this
Function.prototype.bind = function(t) {
	var f = this;
	return function() { f.apply(t, arguments); };
};

...
    _Init: function() {
        this._GetMetroRequest = new Request.JSON({
            url: "/AjaxHandler.aspx", 
            onSuccess: this._OnGetMetroSuccess.bind(this)
        });
    },

...
Рейтинг: 0 / 0
JS: в Ajax обработчике свойство родительского объекта не определено (исп Mootools)
    #36091031
Alex_BBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Меч, спасибо!
...
Рейтинг: 0 / 0
JS: в Ajax обработчике свойство родительского объекта не определено (исп Mootools)
    #36091040
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_BBB,

Кстати, в это вашем mootools bind уже есть :)
http://mootools.net/docs/core/Native/Function#Function:bind
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / JS: в Ajax обработчике свойство родительского объекта не определено (исп Mootools)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]