2012-10-13 23 views
0

這讓我瘋狂。

似乎無法設置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); 
} 

我設置「這個」作爲「自我」從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),它說「未定義」

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

+0

第二個街區是什麼?在我看來,self是一個不好的變量名,因爲self有一個意義。 https://developer.mozilla.org/en-US/docs/DOM/window.self – epascarello

+0

就像epascarello說的,你需要用回調來處理它。即功能Captcha(userKey,callback){... if(status){callback(data.data.captchaKey); }然後做新的驗證碼(self.userKey,function(key){self.captchaKey = key}); –

回答

1

我認爲你的問題是你將異步調用視爲同步的事實。您在Ajax調用返回之前正在讀取該值。

+0

感謝您的建議,但在創建對象後我不會立即調用對象。即使當我點擊事件時(它給了足夠的時間來異步獲取數據),並且當我返回對象時,它具有正確值的屬性。我無法獲得該值=(其他任何建議嗎?) – hsb1007

+0

謝謝Epascarello,你說得對,我把值過早分配給一個變量,並使用該變量,這使得它不確定,非常感謝! – hsb1007