2014-04-24 93 views
1

我是AngularJS的新手,目前正在學習使用angularjs.zip的PHP RESTful服務。我有一個問題,爲什麼我的響應數據不能以ng-repeat顯示?吳重複不顯示數據

這是代碼結構:

<html ng-app="ngTest"> 
    <head> 

    <title>Angular Test</title> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script> 
    <script type="text/javascript" src="https://code.angularjs.org/1.0.7/angular-resource.js"></script> 
    </head> 
    <body> 
     <div ng-controller="GetCtrl"> 
     <ul> 
      <li ng-repeat="user in users">{{ user.email }}</li> 
     </ul> 
    </div> 
     <script type="text/javascript"> 
     var ngTest = angular.module('ngTest',[]); 

     ngTest.factory('GetFactory',function($http){ 
       var users = []; 
       var factory = {}; 

       factory.getUsers = function(){ 
        $http.get('api/get.php'); 
        return users; 
       }; 
       return factory; 
      }); 



     ngTest.controller('GetCtrl',function($scope,GetFactory){ 
        $scope.users = GetFactory.getUsers(); 

     }); 


     </script> 

    </body> 
    </html> 

PHP代碼包含虛擬基礎JSON響應數據:

<?php 
$dummyData = array(
    'email'=>'[email protected]', 
    'password'=>'admin321', 
    ); 
$jsonen = json_encode($dummyData); 
print_r($jsonen); 

?> 

這裏有什麼問題?

更新: 請滾動到@Koddi答案。謝謝。

回答

0

請勿使用print_r,而應使用print來代替打印數據。 print_r添加了不會有效的JSON的其他格式。

更新:

這部分看起來不正確:

$http.get('api/get.php'); 
return users; 

我不是太熟悉AngularJS還,但並不需要分配的東西給用戶變量?看起來您只需調用get.php AJAX請求而不將結果存儲在任何地方。

+1

嗨@michael changin print_r()打印()仍然沒有解決我的問題 –

+0

我更新了我的答案與另一個潛在的問題 –

2

沒有定義變量$data

應該

$jsonen = json_encode($dummyData);

,而不是

$jsonen = json_encode($data);

+0

哦對不起!這是我的眼睛缺陷。 urgh。感謝兄弟,但修復它仍然不會使ng-repeat顯示響應數據。 :( –

+0

@MalikPerang,我從來沒有與_angular.js_合作過,我認爲問題出在那裏,而不是PHP,你在跟隨哪個教程? –

+0

我閱讀文檔並自己嘗試完成。 –

1

這裏是我的編輯答案。請檢查內嵌評論的解釋。

<title>Angular Test</title> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script> 
<script type="text/javascript" src="https://code.angularjs.org/1.0.7/angular-resource.js"></script> 
</head> 
<body> 
    <div ng-controller="GetCtrl"> 
    <ul> 
     <li ng-repeat="user in users">{{ user.email }}</li> 
    </ul> 
</div> 
    <script type="text/javascript"> 
     var ngTest = angular.module('ngTest',[]); 

     ngTest.factory('GetFactory',function($http) 
     { 
       var users = []; 
       var factory = {}; 

       factory.getUsers = function(){ 
        // the problem was here. 
        // as @Michael Butler pointed out.  
        // Next, Best practices is to return the $http.get 
        // so you can play with promises callbacks 
        // in the caller controller (as GetCtrl). 
        // promise callbacks : success() & .error 
        var userGetRequest = $http.get('api/get.php'); 
        return userGetRequest; 
       }; 
       return factory; 
     }); 

     ngTest.controller('GetCtrl',function($scope,GetFactory) 
     { 
        $scope.users = []; 

        GetFactory.getUsers() 
        .success(function(response) 
        { 
         // the api request was OK. 
         // we push because get by default return an object 
         // and here users is an array. 
         $scope.users.push(response); 
         console.log(response); // check navigator console for the server response 
        }) 
        .error(function(response) 
        { 
         // something went wrong with the api request 
         console.log(response); // check navigator console for the server response 
        }); 
     }); 
    </script> 
</body> 
</html> 

你可能注意到VAR用戶裏面的工廠是沒用的,現在「因爲我們是直接返回的承諾作爲調用的結果。但是如果你想用get結果給它,創建工廠內getSuccess功能類似以下內容:

var getSuccess = function(response) 
{ 
    // we push because get by default return an object 
    // and here users is an array. 
    users.push(response);  
} 

而且factory.getUsers內:

var userGetRequest = $http.get('api/get.php'); 
userGetRequest.success(getSuccess); 
return userGetRequest; 

希望有所幫助。

+0

嗨@koddi,你給出的解決方案仍然不能解決我的問題。 :( –

+0

OK.Please嘗試我編輯的新答案 – koddi

+0

感謝@koddi!它的工作。最後我清楚知道何時使用工廠和控制器回調。 –