【问题标题】:AngularJS and Servlet integrationAngularJS 和 Servlet 集成
【发布时间】: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 对象

当我先点击链接时会发生什么?请帮忙

谢谢

【问题讨论】:

    标签: java javascript json angularjs servlets


    【解决方案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));
           };
      });
      

      因此,当您在服务器端延迟执行此代码时,您会看到控制台日志的顺序为:132强>。

      因此,您的成功函数在收到来自服务器的响应时执行。所以第一次,descargas 变量中的值是 null,但是 get 是使用第一个服务器响应存储的,下一次,将显示上一次调用的值。

      【讨论】:

        猜你喜欢
        • 2013-05-02
        • 1970-01-01
        • 2012-10-28
        • 1970-01-01
        • 2013-08-19
        • 2014-12-16
        • 2016-01-10
        • 2012-12-13
        相关资源
        最近更新 更多