2012-11-03 12 views
6

Właśnie zaczynam bałagan z kątowym js i próbuję załadować dane przez akcję postu.Angularjs TypeError: undefined nie jest funkcją

Używam angularjs v.1.0.2

Oto mój kod: HTML:

<!DOCTYPE html> 
<html ng-app> 
    <head> 
     <meta charset="utf-8"> 
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
     <title></title> 
     <meta name="description" content=""> 
     <meta name="viewport" content="width=device-width"> 

     <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js"></script> 
     <script src="<?php echo $baseUrl?>/js/profilling/main.js"></script> 
    </head> 
    <body> 
     <div ng-controller="GroupsCtrl"> 

     </div> 
    </body> 
</html> 

main.js:

function GroupsCtrl($scope, $http) { 
    $scope.url = '/file.php'; 
    $scope.images = []; 

    function handleGroupsLoaded(data, status) { 
     console.log(data); 
    } 

    $scope.fetch = function() { 
     $http.post($scope.url).success($scope.handleGroupsLoaded); 
    } 

    $scope.fetch(); 
} 

Staram się śledzić to jsfiddle: http://jsfiddle.net/simpulton/wHL3F/

Ale pojawia się następujący błąd:

TypeError: undefined is not a function at http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js:92:92 at i (http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js:76:119) at http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js:76:352 at Object.e.$eval (http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js:86:220) at Object.e.$digest (http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js:84:198) at Object.e.$apply (http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js:86:379) at e (http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js:92:330) at o (http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js:95:407) at XMLHttpRequest.q.onreadystatechange (http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js:96:334)

Czy ktoś może pomóc?

Dzięki

EDIT file.php:

echo '{"menu": { 
    "id": "file", 
    "value": "File", 
    "popup": { 
    "menuitem": [ 
     {"value": "New", "onclick": "CreateNewDoc()"}, 
     {"value": "Open", "onclick": "OpenDoc()"}, 
     {"value": "Close", "onclick": "CloseDoc()"} 
    ] 
    } 
}} 
'; 

Wydaje się ważnego obiektu JSON.

+1

Może po prostu trzeba zadeklarować 'funkcja handleGroupsLoaded (dane, status)' jak '$ scope.handleGroupsLoaded = function (dane, status) {. ..} ' – Justen

+0

i teraz czuję się głupio :) dzięki! pracował jak urok! – jribeiro

Odpowiedz

6

Wystarczy zarejestrować handleGroupsLoaded() w $scope

function GroupsCtrl($scope, $http) { 
    $scope.url = '/file.php'; 
    $scope.images = []; 

    $scope.handleGroupsLoaded = function(data, status) { 
     console.log(data); 
    } 

    $scope.fetch = function() { 
     $http.post($scope.url).success($scope.handleGroupsLoaded); 
    } 

    $scope.fetch(); 
}