Javascript AJAX-使用';自我';参考不起作用

Javascript AJAX-使用';自我';参考不起作用,javascript,ajax,properties,Javascript,Ajax,Properties,这让我快发疯了 它似乎无法从AJAX内部设置属性的值 下面是我的代码 function Captcha(userKey) { var self = this; this.key; this.getCaptchaKey = function(userKey) { $.post('/api/captcha/get-key',data, function(data, status,jqXHR) { if(status) {

这让我快发疯了

它似乎无法从AJAX内部设置属性的值

下面是我的代码

function Captcha(userKey) {
    var self = this;

    this.key;
    this.getCaptchaKey = function(userKey) {
        $.post('/api/captcha/get-key',data, function(data, status,jqXHR) {
            if(status) {
                self.key = data.data.captchaKey;

            }
        },"json");
    };
    this.getCaptchaKey(userKey);
}
我将“this”设置为“self”,以便从AJAX调用内部进行引用

然后,当我在console.log()对象外部调用该对象时,它会告诉我该值已经设置好了

self.captcha = new Captcha(self.userKey);
    self.captchaKey = self.captcha.key

    console.log(self.captcha);
因此,“self.captcha”返回对象,并从AJAX调用中设置正确的“key”值

但是当我console.log(self.captcha.key)时,它会说“未定义”


我一直在谷歌上到处搜索,但找不到答案。

我认为你的问题在于你将异步调用视为同步调用。在Ajax调用返回之前读取该值

第二个街区的self是什么?在我看来,self是一个不好的变量名,因为self是有意义的。正如Epasarello所说,您需要通过回调异步处理它。i、 函数Captcha(userKey,callback){…如果(status){callback(data.data.captchaKey);}然后执行新的Captcha(self.userKey,函数(key){self.captchaKey=key});谢谢你的建议,但我不会在对象创建后立即调用对象。即使在单击事件时调用它(这让它有足够的时间异步获取数据)当我返回对象时,它的属性具有正确的值。我无法获取该值=(请提供其他建议?谢谢Epascarello,你做得对。我过早地将值赋给变量并使用该变量,这使得它未定义。非常感谢!