AngularJS with Jersey JSON resource in undefined in javascri


到目前为止

,这是我遇到的奇怪问题。我正在使用jaxon骨干网来做这个Angularjs项目。

  1. Java 资源文件

    @GET @Path("{query}")
    @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    public Signature findByName(@PathParam("query") String query) {
        return dao.findById(query);
    }  
    
  2. 控制.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. 应用程序.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. 服务.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":"xxxx@hotmail.com","sign":null,"barcode":"xxxx"}

并且它会在 HTML 页面上正确显示返回数据。例如,html 页面具有

<p>{{signature.barcode}}
{{signature.name}}

将名称和条形码正确显示为上述数据集。

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

每当javascript试图从数据库中的返回资源中获取数据时,它都会说undefined

您正在尝试在资源可用之前打印资源。对服务器的请求是异步的。改为将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,然后对其执行分配操作。

最新更新