var image;
var imgProperties = new Class({
image: new Array(),
json: function() {
var url = protocol + "//" + host + pathname + "/myEchoFile.php";
var jsonRequest = new Request.JSON({
url: url,
onSuccess: function(img) {
this.image[0] = img.name;
this.image[1] = img.width;
this.image[2] = img.height;
alert('img.name=' + this.name); //alerts myImage.jpg
}
}).post();
console.log("this.image[0]=" + this.image[0]); //undefined
//@fixme
//this.image is undefined
}
});
答案 0 :(得分:3)
请求不是同步的。 (因此它是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
,它确保你指向类实例,而不是全局范围(窗口对象?),这是你以前做过的,修改{{1 }}
让它与anon一起工作就像你一样:
window.image
还要注意我触发了一个名为imageLoaded的事件,你可以从实例中使用它:
onSuccess: function(data) {
this.imageLoaded(data);
}.bind(this)