AngularJS 和 Servlet 集成
Posted
技术标签:
【中文标题】AngularJS 和 Servlet 集成【英文标题】:AngularJS and Servlet integration 【发布时间】:2015-06-30 19:15:00 【问题描述】:我正在尝试调用一个函数,该函数通过链接从 servlet 返回一个 json 对象。
我的html链接,调用fTest函数:
<td><a href="" ng-controller="minaplantaCtrl" ng-click="fTest(x.id_camion_descarga)">ver</a></td>
我的控制器:
app.controller('minaplantaCtrl', function($scope, $http, $window)
$scope.fTest = function(idDescarga)
$http.get("http://localhost:8080/BD_INTEGRADA/UnionMinaPlanta?idDescarga="+idDescarga)
.success(function (response) $scope.descargas = response.descargas;);
$window.alert(JSON.stringify($scope.descargas));
;
);
当我第一次按下时,链接在警报中显示为“未定义”
但是当我再次按下时,如果我能看到在警报中返回的 json 对象
当我先点击链接时会发生什么?请帮忙
谢谢
【问题讨论】:
【参考方案1】:这里的问题是你在成功回调之外警告 $scope.descargas 因此它确实没有定义但尝试像这样修改它。
app.controller('minaplantaCtrl', function($scope, $http, $window)
$scope.fTest = function(idDescarga)
$http.get("http://localhost:8080/BD_INTEGRADA/UnionMinaPlanta?idDescarga="+idDescarga)
.success(function (response)
$scope.descargas = response.descargas;
$window.alert(JSON.stringify($scope.descargas));
);
;
);
【讨论】:
【参考方案2】:由于在 Angular 中使用 $http 的每个服务器端请求都是 AJAX,即对服务器的异步调用,因此您假设您的 alert 方法将在成功响应执行完成后被调用。但这是错误的。
这就是 Angular 中 Promise 概念的来源。
app.controller('minaplantaCtrl', function($scope, $http, $window)
$scope.fTest = function(idDescarga)
console.log("1");
$http.get("http://localhost:8080/BD_INTEGRADA/UnionMinaPlanta?idDescarga="+idDescarga)
.success(function (response)
$scope.descargas = response.descargas;
console.log("2");
);
console.log("3");
$window.alert(JSON.stringify($scope.descargas));
;
);
因此,当您在服务器端延迟执行此代码时,您会看到控制台日志的顺序为:1、3 和 2强>。
因此,您的成功函数在收到来自服务器的响应时执行。所以第一次,descargas
变量中的值是 null,但是 get 是使用第一个服务器响应存储的,下一次,将显示上一次调用的值。
【讨论】:
以上是关于AngularJS 和 Servlet 集成的主要内容,如果未能解决你的问题,请参考以下文章