对象中的对象

Aby*_*yss 5 javascript jquery json

var UsersMenu = function(){
    this.returnUsers = [];
    this.retrieve = function(posts){
        var temp = [];
        $.post("router.php", { "action": "getUsersMenu", "posts" : posts},
        function(data)
        {
            if(data.response){    
                for(var i=0; i<data.returnUsers.length; i++){
                    temp.push(data.returnUsers[i]);
                }
                this.returnUsers = temp; // i know what 'this' is incorrect
            }

        }, "json");
                alert(this.returnUsers);
    }
}
Run Code Online (Sandbox Code Playgroud)

2个问题:
1.如何从jq对象(returnUsers)访问父'this'?
2.为什么jq post之后在jq post中发出警告之前会发出警报?

Dar*_*rov 5

1如何从jq对象(returnUsers)访问父'this'?

你可以在一个闭包中捕获它:

var UsersMenu = function() {
    this.returnUsers = [];
    var self = this;
    this.retrieve = function(posts) {
        var temp = [];
        $.post("router.php", { "action": "getUsersMenu", "posts" : posts },
        function(data) {
            if(data.response) {
                for(var i = 0; i < data.returnUsers.length; i++) {
                    temp.push(data.returnUsers[i]);
                }
                self.returnUsers = temp;
            }
        }, "json");
    }
};
Run Code Online (Sandbox Code Playgroud)

2为什么jq post之后在jq post中的某个警报之前调用时会发出警报?

因为AJAX是异步的.$.post发送AJAX请求的方法立即返回,但是当从服务器收到响应时,成功回调处理程序将在稍后执行.所以你不应该把警报放在这个成功处理程序之外.如果你想使用AJAX调用的结果,这应该只在结果可用的回调中发生.