0

我有一个以下 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 语言一样)。或者,简单地说,我在某个地方有一个错误。我将不胜感激有关此主题的任何提示。

4

1 回答 1

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;
    });
},
于 2013-03-29T23:47:45.333 回答