Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.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
获取AngularJS上的$http响应错误状态_Angularjs - Fatal编程技术网

获取AngularJS上的$http响应错误状态

获取AngularJS上的$http响应错误状态,angularjs,Angularjs,我学习AngularJS的一门在线课程,现在正处于学习的第一步 我试图在表单提交后调用API,并根据API响应显示和隐藏一些数据 我首先要做的是检查状态响应,以防它返回500个无效API调用错误。然而,似乎我做不到 我的服务文件的一部分: service.getMenuItem = function (shortName) { return $http.get(ApiPath + '/menu_items/' + shortName + '.json') .then(fun

我学习AngularJS的一门在线课程,现在正处于学习的第一步

我试图在表单提交后调用API,并根据API响应显示和隐藏一些数据

我首先要做的是检查状态响应,以防它返回500个无效API调用错误。然而,似乎我做不到

我的服务文件的一部分:

  service.getMenuItem = function (shortName) {

    return $http.get(ApiPath + '/menu_items/' + shortName + '.json')
    .then(function successCallback(response) {
      return response.data;
    }, function errorCallback(response) {
      return response.status;
    })
  };
在我的控制器上:

SignupController.$inject = ['MenuService'];
function SignupController(MenuService) {
  var signupCtrl = this;

  signupCtrl.submit = function () {
    signupCtrl.response = MenuService.getMenuItem(signupCtrl.user.favouritedish);
    if ( signupCtrl.response == 500 ) {
      signupCtrl.dishError = true;
    }
  };
}
如果我在$http调用上没有任何错误,那么一切都会正常工作。然而,对于500的错误,它似乎不是。我试图在我的控制器上记录
signupCtrl.response
,并且
值:500
在那里。但if无法验证


AngularJS上的1.5.8版使用.then()链接方法调用服务函数

SignupController.$inject = ['MenuService'];

    function SignupController(MenuService) {
      var signupCtrl = this;

      signupCtrl.submit = function() {

        MenuService.getMenuItem(signupCtrl.user.favouritedish)
          .then(function(result) {
            console.log(result.data)
          }, function(error) {
            console.log(error.data)
          })
      };
    }

使用.then()链接方法调用服务函数

SignupController.$inject = ['MenuService'];

    function SignupController(MenuService) {
      var signupCtrl = this;

      signupCtrl.submit = function() {

        MenuService.getMenuItem(signupCtrl.user.favouritedish)
          .then(function(result) {
            console.log(result.data)
          }, function(error) {
            console.log(error.data)
          })
      };
    }

$http
服务不会返回承诺。它将返回其
成功
错误
的回调函数。因此,您的服务应该如下所示:

function getMenuItem() {

            var deferred = $q.defer();

            $http.get(serviceBase + '/api/itemId').success(function (result) {
                deferred.resolve(result);
            }).error(function (err) {
                deferred.reject(err.status);

            });
            return deferred.promise;
        }
因此,在本例中,如果成功,您将解决结果。或者,如果失败,您将解析状态

在控制器中,您应该执行以下操作:

SignupController.$inject = ['MenuService'];
function SignupController(MenuService) {
  var signupCtrl = this;

  signupCtrl.submit = function () {
    signupCtrl.response = MenuService.getMenuItem(signupCtrl.user.favouritedish).then(function(response){

    //to do if it success
    }, function(errorStatus){
     signupCtrl.dishError = true;
    // to do with the error status
  };
}

$http
服务不会返回承诺。它将返回其
成功
错误
的回调函数。因此,您的服务应该如下所示:

function getMenuItem() {

            var deferred = $q.defer();

            $http.get(serviceBase + '/api/itemId').success(function (result) {
                deferred.resolve(result);
            }).error(function (err) {
                deferred.reject(err.status);

            });
            return deferred.promise;
        }
因此,在本例中,如果成功,您将解决结果。或者,如果失败,您将解析状态

在控制器中,您应该执行以下操作:

SignupController.$inject = ['MenuService'];
function SignupController(MenuService) {
  var signupCtrl = this;

  signupCtrl.submit = function () {
    signupCtrl.response = MenuService.getMenuItem(signupCtrl.user.favouritedish).then(function(response){

    //to do if it success
    }, function(errorStatus){
     signupCtrl.dishError = true;
    // to do with the error status
  };
}

getMenuItem函数返回的是承诺,而不是解析值。 因此,只需在其上使用“then”,即可检查解析值

MenuService.getMenuItem(signupCtrl.user.favouritedish).then(
   function(response) {
      if (response === 500) {
         signupCtrl.dishError = true;
      }
   }
);
希望有帮助。 顺便说一句,这段代码可能会让人困惑,因为“500”可能是“response.data”合法响应。 因此,最好不要放置“错误”回调,让调用服务自己处理错误。 e、 g


getMenuItem函数返回的是承诺,而不是解析值。 因此,只需在其上使用“then”,即可检查解析值

MenuService.getMenuItem(signupCtrl.user.favouritedish).then(
   function(response) {
      if (response === 500) {
         signupCtrl.dishError = true;
      }
   }
);
希望有帮助。 顺便说一句,这段代码可能会让人困惑,因为“500”可能是“response.data”合法响应。 因此,最好不要放置“错误”回调,让调用服务自己处理错误。 e、 g


您当前的响应输出是什么?只是一个数字还是一个对象?@Aer0它是一个对象$$state:Object->status:1和value:500现在还不确定,但是tt可以使用
signupCtrl.response.value
。@Aer0忘了提到我也尝试过它,它返回了未定义的结果。您介意共享一个功能性的小提琴吗?我们可以玩一下?您当前的响应输出是什么?只是一个数字还是一个对象?@Aer0它是一个对象$$状态:对象->状态:1和值:500当前不确定,但是tt可以使用
signupCtrl.response.value
then.@Aer0忘了提到我也尝试过它,它返回了未定义的结果。你介意分享一把功能小提琴吗?AngularJS不赞成使用“成功与错误”,get-then是他们文档中唯一建议的方法。是的,兄弟,我们的想法是使用$q服务来回报您的服务承诺。我相信如果你遵循我的答案,它会起作用。AngularJS和get-then不推荐使用success and error,这是他们文档中唯一建议的方法。是的,兄弟,我们的想法是使用$q服务来回报你的服务承诺。我相信如果你按照我的答案去做,它会奏效的。