2017-06-18 31 views
0

我想弄清楚爲什麼access_token(函數)變量不能從內部作用域訪問(即嵌套在全局函數內部)。無法獲取/設置應該在範圍內的變量

下面是代碼:

$(function() { 

      var accessToken = ""; 

      var getHeaders = function() { 
       alert(accessToken); 
       if (accessToken) { 
        return { 
         "Authorization" : "Bearer " + accessToken 
        }; 
       } 
      } 

      var showResponse = function (obj) { 

       $("#output").text(JSON.stringify(obj, null, 4)); 

      }; 

      var register = function() { 
       var url = "/api/account/register"; 
       var contentBody = $("#registerData").serialize(); 

       $.post(url, contentBody).always(showResponse); 
       return false; 
      } 

      var saveAccessToken = function (response) { 
       accesToken = response.access_token; 
      }; 

      var login = function() { 
       var url = "/token"; 
       var contentBody = $("#loginData").serialize(); 
       contentBody = contentBody + "&grant_type=password"; 
       $.post(url, contentBody) 
        .success(saveAccessToken) 
        .always(showResponse); 

       return false; 
      }; 

      var getPatients = function() { 
       var url = "http://localhost:62012/api/patients/"; 
       $.ajax(url, { 
        type: "GET", 
        beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken); } 
       }).always(showResponse); 

       return false; 

      }; 

      $("#getPatients").click(getPatients); 
      $("#register").click(register); 
      $("#login").click(login); 
     }); 

我已經嘗試在整個代碼中使用的警報,但它似乎好像accessToken根本""每當警報不會觸發saveAcessToken。 ..

應用程序的一般流程:

  1. 用戶登錄,設置accessToken
  2. ajaxGET當用戶點擊getPatients按鈕時發送請求。

任何幫助將不勝感激!

+0

您很可能在AJAX調用完成之前嘗試訪問該變量。 –

+0

請參閱「一般流程」中的編輯。當我發送請求時,變量不應該被設置,因爲變量**應該在'login'之後被設置。 :/ – geostocker

+2

我沒有看到這與C#有什麼關係。 – mason

回答

2

看起來您正在saveAccessToken中設置一個名爲accesToken的變量。嘗試將其重命名爲accessToken