2012-11-09 79 views
1

我想記錄在對象上調用方法的結果。在對象上調用方法

當前腳本字面上記錄函數的結果token我的意思是結果是定義的函數。

我在這裏做錯了什麼?非常感謝!

$(document).ready(function() { 

     // General Settings 
     var 
     ApiSettings = { 
      clientId: 'aaa', 
      clientSecret: 'bbb', 
      token: function() { 
       var token; 
       $.getJSON(ApiSettings.uriGetToken, processData); 
       function processData(data) { 
        token = data.access_token; 
       } 
       return token; 
      } 
     } 
     ApiSettings.uriGetToken = 'https://ccc.com/oauth/token?grant_type=client_credentials&client_id=' + encodeURIComponent(ApiSettings.clientId) + '&client_secret=' + encodeURIComponent(ApiSettings.clientSecret); 

     console.log(ApiSettings); 
     console.log(ApiSettings.uriGetToken); 
     var test = ApiSettings.token; 

     console.log(test); 



    }); 

回答

1

嘗試

 token: (function() { 
      var token; 
      $.getJSON(ApiSettings.uriGetToken, processData); 
      function processData(data) { 
       token = data.access_token; 
      } 
      return token; 
     })() 

應該執行你的函數內聯替換

 token: function() { 
      var token; 
      $.getJSON(ApiSettings.uriGetToken, processData); 
      function processData(data) { 
       token = data.access_token; 
      } 
      return token; 
     } 

另外,您可以通過URI作爲參數傳遞給令牌功能,

 token: function (tokenURI) { 
      var token; 
      $.getJSON(tokenURI, processData); 
      function processData(data) { 
       token = data.access_token; 
      } 
      return token; 
     } 

,然後調用

ApiSettings.token('https://ccc.com/oauth/token?.......'); 
+0

感謝您的命中,現在我收到一個錯誤未捕獲TypeError:調用$ .getJSON(ApiSettings.uriGetToken,processData)時無法讀取未定義的屬性'uriGetToken'; – GibboK

+0

任何想法如何解決它,我相信這是不相關的我原來的問題,但我將不勝感激你的幫助,謝謝! – GibboK

+0

@lostsource這是行不通的。 'ApiSettings.uriGetToken'在稍後纔會被設置。 –

1

你有兩個問題我想。

1)您需要在使用之前定義processData函數

// $.getJSON(ApiSettings.uriGetToken, processData); 
// function processData(data) { 
//  token = data.access_token; 
// } 
// Becomes: 
function processData(data) { 
    token = data.access_token; 
} 
$.getJSON(ApiSettings.uriGetToken, processData); 

2)你需要呼叫令牌的方法。

// var test = ApiSettings.token; 
// Becomes: 
var test = ApiSettings.token(); // Note the new brackets. 
0

拿出你的代碼了準備部分,它會工作。 我在我的Chrome瀏覽器的控制檯中測試過它,它工作。 可能是範圍的問題。

相關問題