Запрос не является синхронным.(следовательно, это AJAX) Требуется время, чтобы запустить, завершить и установить значения.
вы должны ссылаться на экземпляр вашего класса из onSuccess и вызывать отдельную функцию, например:
var imgProperties = new Class({
Implements: [Events,Options],
initialize: function(options) {
this.setOptions(options);
},
json: function() {
new Request.JSON({
url: "//" + host + pathname + "/myEchoFile.php",
onSuccess: this.imageLoaded.bind(this)
}).post();
},
imageLoaded: function(data) {
this.image = [data.name, data.width, data.height];
this.fireEvent("imageLoaded", this.image);
}
});
также обратите внимание на .bind(this)
в функции onSuccess
, которая гарантирует вамукажите на экземпляр класса, а не на глобальную область видимости (объект окна?), что вы делали раньше, изменив window.image
.
, чтобы он работал с аноном так, как у вас, было бы так:
onSuccess: function(data) {
this.imageLoaded(data);
}.bind(this)
также заметил, что я запускаю событие с именем imageLoaded, которое вы можете использовать из экземпляра:
new imgProperties({
onImageLoaded: function(imageArray) {
// access imageArray
// or just access this.image instead!
// or export it to your global namespace like before
window.image = this.image;
// more code that relies on window.image being defined...
}
}).json();