Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从AngularJS$http.get().then()获取响应_Javascript_Angularjs - Fatal编程技术网

Javascript 如何从AngularJS$http.get().then()获取响应

Javascript 如何从AngularJS$http.get().then()获取响应,javascript,angularjs,Javascript,Angularjs,我最近开始从bootstrap3升级到bootstrap4,这也需要我从AngularJS 1.5.8升级到AngularJS 1.6.1的最低版本。我有一个简单的AngularJS/MVC应用程序,具有以下代码设置: /脚本/app.js(包含路由) /scripts/controllers.js(包含控制器、方法调用等) /scripts/services.js(包含命中C#控制器并带回数据的回调方法,或“做事”(CRUD方法) 在my controllers.js中,我有一个方法: fun

我最近开始从bootstrap3升级到bootstrap4,这也需要我从AngularJS 1.5.8升级到AngularJS 1.6.1的最低版本。我有一个简单的AngularJS/MVC应用程序,具有以下代码设置:

/脚本/app.js(包含路由) /scripts/controllers.js(包含控制器、方法调用等) /scripts/services.js(包含命中C#控制器并带回数据的回调方法,或“做事”(CRUD方法)

在my controllers.js中,我有一个方法:

function init() {
    api.initialIndexLoad(
        function(result) {
            if (result.error) {
                notificationService.danger("<h5>An error occurred.</h5><h6>Details: {0}</h6>".format(result.error));
            } else {
                vm.dataList = result.theDataFromCSharp;
            }
            vm.loaded = true;
        }
    );
}

init();
因此,当然,在将我的库更新到AngularJS 1.6.1(实际上,我直接转到AngularJS 1.7.5)之后,我开始出现错误,过了一段时间,我发现promise语法发生了变化。因此我尝试进行更改,并将我的services.js更新为:

"use strict";

angular
.module("CustList.services", ["ngResource"])
.service("api",
    function api($resource, $http, notificationService) {
        function handleSuccess(response) {
            return response.data;
        }

        function handleError(err, fn) {
            if (!fn) {
                notificationService.error(err);
            } else {
                fn(err);
            }
        }

        return {
            initialIndexLoad: function() {
                $http
                    .get("/Customers/InitialIndexLoad")
                    .then(handleSuccess)
                    .catch(handleError);
            }
        };
    }
);
错误消失了,我以为我已经完成了升级,直到我意识到:我实际上并没有把数据取回!我创建的新
handleSuccess
方法在响应中获取数据,但是
返回响应。data
没有把数据返回到controllers.js方法,所以我可以将它插入
中>vm.dataList


它不会抛出错误-它只是不做任何事情。我希望您能帮助我解决这个问题!

返回initialIndexLoad内部

所以


我猜就是它,可能在重构/升级过程中丢失了。

返回initialIndexLoad内部

所以


我猜就是这样,可能在重构/升级过程中丢失了。

服务方法需要遵守
$http
承诺

app.service("api",
    function api($http, notificationService) {
        function handleSuccess(response) {
            return response.data;
        }

        function handleError(err) {
            notificationService.error(err);
            throw err;
        }

        return {
            initialIndexLoad: function() {
                ̶$̶h̶t̶t̶p̶
                return $http
                    .get("/Customers/InitialIndexLoad")
                    .then(handleSuccess)
                    .catch(handleError);
            }
        };
    }
);
请注意,
errorHandler
需要修改错误。否则,处理程序将把被拒绝的承诺转换为已履行的承诺

控制器需要使用
。然后
捕获
方法:

function init() {
    var promise = api.initialIndexLoad();
    promise.then(function(result) {
       if (result.error) {
            notificationService.danger("<h5>An error occurred.</h5><h6>Details: {0}</h6>".format(result.error));
        } else {
            vm.dataList = result.theDataFromCSharp;
        }
        vm.loaded = true;
    }).catch(functions(err) {
        console.log(err);
        throw err;
    });
}
函数init(){
var promise=api.initialIndexLoad();
承诺。然后(功能(结果){
if(result.error){
notificationService.danger(“发生错误。详细信息:{0}”。格式(result.error));
}否则{
vm.dataList=result.theDataFromCSharp;
}
vm.loaded=true;
}).catch(函数(错误){
控制台日志(err);
犯错误;
});
}
.then
方法返回一个新的承诺,该承诺通过
successCallback
errorCallback
的返回值来解析或拒绝(除非该值是承诺,在这种情况下,它是使用该承诺中解析的值来解析的)

有关详细信息,请参阅


    • 服务方法需要遵守
      $http
      承诺

      app.service("api",
          function api($http, notificationService) {
              function handleSuccess(response) {
                  return response.data;
              }
      
              function handleError(err) {
                  notificationService.error(err);
                  throw err;
              }
      
              return {
                  initialIndexLoad: function() {
                      ̶$̶h̶t̶t̶p̶
                      return $http
                          .get("/Customers/InitialIndexLoad")
                          .then(handleSuccess)
                          .catch(handleError);
                  }
              };
          }
      );
      
      请注意,
      errorHandler
      需要修改错误。否则,处理程序将把被拒绝的承诺转换为已履行的承诺

      控制器需要使用
      。然后
      捕获
      方法:

      function init() {
          var promise = api.initialIndexLoad();
          promise.then(function(result) {
             if (result.error) {
                  notificationService.danger("<h5>An error occurred.</h5><h6>Details: {0}</h6>".format(result.error));
              } else {
                  vm.dataList = result.theDataFromCSharp;
              }
              vm.loaded = true;
          }).catch(functions(err) {
              console.log(err);
              throw err;
          });
      }
      
      函数init(){
      var promise=api.initialIndexLoad();
      承诺。然后(功能(结果){
      if(result.error){
      notificationService.danger(“发生错误。详细信息:{0}”。格式(result.error));
      }否则{
      vm.dataList=result.theDataFromCSharp;
      }
      vm.loaded=true;
      }).catch(函数(错误){
      控制台日志(err);
      犯错误;
      });
      }
      
      .then
      方法返回一个新的承诺,该承诺通过
      successCallback
      errorCallback
      的返回值来解析或拒绝(除非该值是承诺,在这种情况下,它是使用该承诺中解析的值来解析的)

      有关详细信息,请参阅


      这正是我想要的。非常感谢。这正是我想要的。非常感谢。