我有一个以下的javascript对象:
var UsersControl = {
users: null,
fetchData: function() {
$.ajax({
type: "GET",
dataType: "json",
context: this,
url: "../php/client/json.php",
data: {
type: "users"
}
}).done(function(response) {
this.users = response;
});
},
getData: function() {
if (this.users == null) {
this.fetchData();
}
return this.users;
}
};
当我运行getData()
方法时,users
字段已定义,但此调用中返回旧值(null
)。在下一次调用中,返回适当的值(ajax-ed)。示例javascript控制台会话:
> UsersControl
> Object {users: null, fetchData: function, getData: function}
> UsersControl.getData()
> null
> UsersControl
> Object {users: Array[2], fetchData: function, getData: function}
> UsersControl.getData()
> [Object, Object]
看起来javascript会在调用方法时记住对象的当前状态 - 并且在方法完成后将应用所有状态更改。但这使得无法动态运行修改对象字段(就像我之前使用的每种OOP语言一样)。或者,简单地说,我在某个地方有一个bug。我对此主题的任何提示都表示感谢。
答案 0 :(得分:0)
愚蠢的我......这是一个同步的问题......
fetchData: function() {
$.ajax({
type: "GET",
dataType: "json",
context: this,
url: "../php/client/json.php",
async: false, // <- note this
data: {
type: "users"
}
}).done(function(response) {
this.users = response;
});
},