0

到目前为止,这是我遇到的奇怪问题。我正在使用 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. 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. 应用程序.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.

4

1 回答 1

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然后对其执行分配操作。

于 2013-10-04T08:56:00.147 回答