,这是我遇到的奇怪问题。我正在使用jaxon骨干网来做这个Angularjs项目。
Java 资源文件
@GET @Path("{query}") @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) public Signature findByName(@PathParam("query") String query) { return dao.findById(query); }
控制.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 }; }
应用程序.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'});
服务.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
,然后对其执行分配操作。