2017-02-10 45 views
0

我有了這個服務:不可能得到從服務JSON到angularJs路由

monApp.service('serviceEtatConnexion', function ($http) { 
    this.getEtatConnexion = function() { 
    return $http.get('backend/backend.php?action=get_etat_connexion'); 
    }; 
}); 

後端PHP返回此值,當直接調用:

{"statuslogin":1} 

在我angularjs路由,我想得到這個值測試這樣的值:

resolve:{ 
    "check":function($window,serviceEtatConnexion,$location){ 
     var u = serviceEtatConnexion.getEtatConnexion(); 

     console.log('u est egal a ' +u); 
     console.log(u.$$state.statuslogin); 
     alert(JSON.stringify(u, null, 4)); 
     /* if(u!= '{"$$state":{"status":0}}'){ 
      alert("ok"); 
     }else{ 
      alert("Vous devez vous identifier pour utiliser cette partie"); 
      $window.location.href ='http://liseo.lan/dev/login.phtml?mlog=&domain=stuff'; 

     } */ 
    } 
    } 

絕對沒有辦法得到statuslogin json值,看看我所嘗試過的。我總是看到控制檯內的「undefined」 我不明白爲什麼。

對於信息,這是我的PHP函數,即正確編碼JSON:

function get_etat_connexion(){ 

session_start(); 

include_once("../../../globprefs.php"); 
include_once("../../../manage_session.php"); 

$http_form_vars = count($_POST) > 0 ? $_POST : 
            (count($_GET) > 0 ? $_GET : array("")); 


if(USER&PASSWORD){ 

    $reponse['statuslogin']=1; 
     echo(json_encode($reponse)); 


} 

else{ 
    $reponse['statuslogin']=0; 
     echo(json_encode($reponse)); 
} 

}

即使這不工作,返回undefined:

VAR statuslogin = $ HTTP。獲得( '後端/ backend.php行動= get_etat_connexion?'); console.log('statuslogin estalal a'+ statuslogin);

回答

1

$http服務返回承諾這意味着只是調用該函數將不會返回任何內容,因爲承諾尚未解決。看看下面的代碼片段

resolve:{ 
    "check":function($window,serviceEtatConnexion,$location, $q) { 
     var deferred = $q.defer(); 
     serviceEtatConnexion.getEtatConnexion() 
      .then(function(result) { 
       if (result.statusLogin === 1) { 
        // Everything is okay, resolve the promise with the result 
        deferred.resolve(result); 
       } else { 
        // Something went wrong, not logged in. Reject the promise 
        deferred.reject(result); 
       } 
      }); 
     return deferred.promise; 
    } 
} 

然後你就可以添加任何代碼到if語句內處理您的錯誤。一個常見的慣例是監聽$stateChangeError事件並處理該偵聽器中的重定向等。

+0

是的,終於沒有工作,當人沒有登錄,我想你的解決方案 – user7370387

+0

它終於正常工作,非常感謝你,只是改爲if(result.data.statuslogin === 1) – user7370387

0

您得到undefined,因爲您將變量u分配給由$http服務創建的承諾(最終得到解決)。您真正想要的是等待該承諾解決,並將變量u分配給承諾成功回調返回的響應。要解決

變化:

var u = serviceEtatConnexion.getEtatConnexion(); 

要:

var u = null; 
serviceEtatConnexion.getEtatConnexion() 
    .then(function(response){ 
     u = response.data; 
    }); 

現在u應等於{"statuslogin":1}

+1

謝謝你的工作! – user7370387