2016-07-04 16 views
0

私は機能を持っています、ログイン目的で$ http.postを持っています。成功した場合、別の$ http.postは、データベースからデータを取得するPHPファイルを呼び出します。問題は、私がlocalstorageからデータをロードしようとすると、それは私にnullを返すことです。それはなぜそうですか?

$scope.loginUser = function() 
{ 
    var data = 
    { 
     username: $scope.loginInfo.username, 
     password: $scope.loginInfo.password 
    } 
    $http.post("endpoints/login.php", data).success(function(response) 
    { 
     if(response==="ERROR") 
     { 
      //DONT DO ANYTHING 
     }  
     else 
     { 
      localStorage.setItem("token", JSON.stringify(response)); 
      console.log("loginController: name is this " + localStorage); 
      fetchDataFunction(data); 
      $state.go("application"); 


      //$state.go("application", result); 
     }  
    }).error(function(error) 
    { 
     console.error(error); 
    }); 

} 

fetchDataFunction = function(data) 
{ 
    $http.post("endpoints/fetchData.php", data).success(function(response) 
    { 
     localStorage.setItem("data", JSON.stringify(response)); 
    }).error(function(error) 
    { 
     console.error(error); 
    }); 
} 
+1

フロープロセスはどんな意味がありません。なぜあなたはアプリケーション状態でfetchDataをしませんでしたか? – charlietfl

+0

こんにちは、私の意図は、ログイン直後にデータベースからすべてのデータを取得し、アプリケーションページをロードし、そこにすべてのデータを表示することです。 – BlackHazelNut

+0

そうですが、ノルムは状態自体に必要なものをロードすることです。コントローラとテンプレートがロードされる前にすべてが利用可能になるように 'resolve'でそれを行うことができました。今すぐfetchDataリクエストが完了する前に状態を切り替える – charlietfl

答えて

0

あなたは約束を返します。これは、$http.postを返すことができ、その後、すべてのコードは、正しい順序で動作します:

$scope.loginUser = function() { 
    login($scope.loginInfo).then(function (response) { 

     localStorage.setItem("token", JSON.stringify(response)); 
     console.log("loginController: name is this " + localStorage.getItem("token")); 

     fetchDataFunction(data).then(function() { 

      localStorage.setItem("data", JSON.stringify(response)); 
      console.log(localStorage.getItem("data")); 
      $state.go("application"); 

     }).catch(function (error) { 
      console.error(error); 
     }); 

    }).catch(function (response) { 

     console.error(error); 

    }); 
}; 

var login = function (user) { 
    return post("endpoints/login.php", user); 
}; 

var fetchDataFunction = function (data) { 
    return post("endpoints/fetchData.php", data); 
}; 

var post = function (url, data) { 

    var deferred = $q.defer; 

    $http.post(url, data).then(function (response) { 
     if (response === "ERROR") { 
      deferred.reject(response); 
     } 
     else { 
      deferred.resolve(response); 
     } 
    }).catch(function (error) { 
     deferred.reject(error); 
    }); 

    return deferred; 
}; 

注:

  • あなたがする必要があります。 $ httpと一緒に$ qをコントローラーに注入することを確認してください。
  • localStorage.getItem()は、あなたはこれらのように、success/errorの代わりにthen/catchを使用する必要があります
  • Eグローバルオブジェクトは現在、減価償却される:https://docs.angularjs.org/api/ng/service/ $ HTTP
関連する問題