2013-10-04 34 views
0

这是我迄今为止很奇怪的问题。 我正在使用jaxon骨干来完成这个Angularjs项目。AngularJS与泽西JSON资源中未定义在javascript中

  1. Java资源文件

    @GET @Path("{query}") 
    @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) 
    
    public Signature findByName(@PathParam("query") String query) { 
        return dao.findById(query); 
    } 
    
  2. control.js文件

    function SearchCtrl($rootScope,$scope,Signature) { 
    
    // console.log('SearchCtrl is invoked!!!!!!'); 
        $scope.signature; 
        $scope.searcherrormsg=''; 
    
        $scope.searchaction = function(barcodenum,signature) { 
        signature = Signature.query({rewardcardId:barcodenum}); 
        $scope.signature = signature; 
    
        alert("data is " + $scope.signature.name); <=== This is UNDEFINED 
        }; 
    
    } 
    
  3. apps.js文件

    angular.module('demo', ['demo.filters', 'demo.directives','demo.services.signature']). 
        config(['$routeProvider', function($routeProvider) { 
    
    $routeProvider.when('/search', {templateUrl: 'partials/search.html', controller: SearchCtrl}); 
    $routeProvider.otherwise({redirectTo: '/search'}); 
    
  4. service.js文件

    angular.module('demo.services.signature', ['ngResource']). 
    factory('Signature', function($resource){ 
        return $resource('api/signature/:rewardcardId', {}, { 
        query: {method:'GET', params:{rewardcardId:'signature'}, isArray:false} 
        }); 
    }); 
    

这是调用数据库和服务器控制台显示以下消息;

com.sun.jersey.api.container.filter.LoggingFilter$Adapter finish 
INFO: 1 * Server out-bound response 
1 < 200 
1 < Content-Type: application/json 
1 < 
{"name":"xxx xxxx","customerid":187,"email":"[email protected]","sign":null,"barcode":"xxxx"} 

它会正确显示HTML页面的返回数据。例如,html页面有

<p>{{signature.barcode}} 

{{signature.name}} 

它们正确地显示名称和条形码与上述数据集一样。

它只有一个问题才能从未定义的javascript中获取数据。

每当javascript试图从数据库返回资源时获取数据,它就是undefined

回答

2

您正试图在资源可用之前打印资源。对服务器的请求是异步的。改为将alert("data is " + $scope.signature.name);代入成功回调。

$scope.searchaction = function (barcodenum, signature) { 
    Signature.query({ rewardcardId: barcodenum }, 
     function(data) { 
      $scope.signature = data; 
      alert("data is " + $scope.signature.name); 
     }, 
     function(err) { // error handling can go here 
    }); 
}; 

我不知道为什么你传递signature$scope.searchaction,然后在其上执行的赋值操作。

+0

哇!这正是我正在寻找的!非常感谢!你的回答是正确的! – user2845558