2015-09-04 53 views
2

我有我的變量mydata,我在$http.post裏面重寫。我想知道如何訪問$http.post之外的變量mydata。如果我這樣做console.log(mydata);我收到錯誤undefined在AngularJS中重寫變量

.controller('MapCtrl', function ($scope, $ionicSideMenuDelegate, $cordovaGeolocation,$http) { 

      var mydata; 

      $http.post('http://example.com').then(function(resp) { 

       mydata = resp.data['somedata']; 

      }, function(err) { 
       ..... 
      }) 

      console.log(mydata); 
     }) 
+0

這是怎麼異步調用工作...回調將調用一旦異步調用得到回調succeed..the數據回報將不會被外界的訪問函數。因爲同步執行先執行外部行,然後JavaScript編譯器進行異步調用 –

+0

我明白了。有沒有任何解決方法,以獲得我的數據以外的httppost? – radioaktiv

+0

只是你不能,只有當ajax成功時你才能得到它。 –

回答

2

$http.post是一個異步調用。當您在mydata上致電console.log()時,它尚未加載,因此是undefined

變量mydata是在控制範圍內,因爲你在那裏定義它,這樣你就可以訪問它,只要它沒有被你稱爲console.log()

的那一刻。如果你把一個timeout各地分配到resp.data['somedata']您的控制檯日誌,例如setTimeout(function(){ console.log(mydata) }, 100),您將看到數據。

2

AngularJS $httpASYNC,所以當你記錄你的結果時,它還沒有被分配。

你可以嘗試這樣的事情與您的數據的工作:

var mySuccessCallback = function(somedata){ 
    //I have my data here! 
    console.log('Here is my response: ', somedata); 

    //some awesome functionallity here... 
    somedata = somedata + 1;  
} 

var handleMyErrorPlease = function(response){ 
    console.log('Something really bad happened! :(', response.error); 
} 

$http.post('http://myurl', myPayload) 
    .success(mySuccessCallback) 
    .error(handleMyErrorPlease); 

你可以閱讀了很多在這裏:AngularJS $http

0

你所得到的值作爲undefined,因爲你的Ajax正在做出asynchronous呼叫,這意味着直到響應結束,該值不會被分配。您可以修改您的通話$http像這樣:

$http({ url: 'http://example.com', 
     method: 'POST', 
     async: false});