Следующий код создаёт объект
map
, содержащий метод
ipgeobaseCoords()
. Последний выполняет GET-запрос и передаёт результат анонимной callback-функции в XML. Так же в callback передаётся и сам объект
map
с помощью
bind(this)
.
var mapEngine = function (target) {
// Немного кода который сейчас не важен.
};
mapEngine.prototype.ipgeobaseCoords = {};
mapEngine.prototype.clientIP = '???.???.???.???';
mapEngine.prototype.ipgeobaseSetCoords = function () {
$.ajax('//ipgeobase.ru:7020/geo', {
method: 'get',
dataType: 'xml',
data: { ip: this.clientIP },
success: function (xml) {
var _xml = $(xml),
lat = _xml.find('lat'),
lng = _xml.find('lng');
if (lat.length > 0 && lng.length > 0) { // Получили данные, проверили.
alert (Object.keys(this.ipgeobaseCoords).length); // Выведет "0": свойство доступно.
// Иначе в консоль вернулось бы
// сообщение об ошибке.
this.ipgeobaseCoords.lat = lat.first().html(); // Пишем данные.
this.ipgeobaseCoords.lng = lng.first().html(); // Пишем данные.
alert (Object.keys(this.ipgeobaseCoords).length); // Проверяем, возвращает "2". Всё ОК.
}
}.bind(this)
});
};
$(function(){
var map = new mapEngine('map'); // Создаём объект.
map.ipgeobaseSetCoords(); // Выполняем метод.
alert (Object.keys(map.ipgeobaseCoords).length); // Проверяем. Опа! Выводит "0".
});
Что это значит:
this
успешно передаётся в callback-функцию, но при этом его свойства могут меняться только в её пределах. Пробовал создать отдельный метод специально для записи значения, вызывая его аналогичным образом - работает точно так же.
И что же делать теперь?