javascript ajax方法:刷新setter

时间:2013-03-29 23:31:52

标签: javascript getter-setter

我有一个以下的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。我对此主题的任何提示都表示感谢。

1 个答案:

答案 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;
    });
},