【问题标题】:$http get api response is undefined in angularJS$http get api 响应在 angularJS 中未定义
【发布时间】:2020-01-16 03:30:23
【问题描述】:

我遇到了一些问题,我似乎在回调中获取数据,但在 Get XMLHttpRequest 方法中遇到错误“未定义响应”。

ReferenceError: 响应未定义

at eval (eval at getApproval (https://localhost:44301/TC_HRApp/views/travel/travelclaim/js/service.js:555:20), <anonymous>:1:1)
at Object.getApproval (https://localhost:44301/TC_HRApp/views/travel/travelclaim/js/service.js:555:20)
at Scope.$scope.fnMatrixApproval (https://localhost:44301/TC_HRApp/views/travel/travelclaim/js/controllers.js:850:40)
at Object.fn (https://localhost:44301/TC_HRApp/views/travel/travelclaim/js/controllers.js:982:24)
at Scope.$digest (https://localhost:44301/Scripts/angular/angular.js:14230:29)
at Scope.$apply (https://localhost:44301/Scripts/angular/angular.js:14493:24)
at done (https://localhost:44301/Scripts/angular/angular.js:9650:47)
at completeRequest (https://localhost:44301/Scripts/angular/angular.js:9840:7)
at XMLHttpRequest.requestLoaded (https://localhost:44301/Scripts/angular/angular.js:9781:9)"

当我查看调试器时,我必须等待几分钟才能得到一个如下所示的 .json 响应对象:

approvers: Array(1)
0: {code: "", name: ""}
length: 1
__proto__: Array(0)
checkers: Array(1)
0: {code: "", name: ""}
length: 1
__proto__: Array(0)
pics: Array(1)
0:
code: "MRT2eDJtg520181120161414"
name: "Sharon Lin"

所以数据似乎都在那里,我只是很难弄清楚如何获取它。

有人可以帮我指出正确获取数据的方向吗?

这是代码 service.js

var getApproval = function (employee) {
    var deferred = $q.defer();

    return $http({
        method: 'GET',
        url: ICLAIM_DOMAIN + '/api/approval-chain/get-matrix?username=' + USERNAME_TRAVEL_CLAIM + '&password=' + PASSWORD_TRAVEL_CLAIM
        + '&department=' + employee.departmentId + '&location=' + employee.locationId,
        headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
    }).then(function (response) {
        deferred.resolve(response.data);
    }, function (response) {
        deferred.reject('failed');
    });
    return deferred.promise;
}

这是代码 controller.js

$scope.fnMatrixApproval = function (total) {
    debugger
    if (parseInt(total, 10) < 100.00) {
        travelclaimService.getApproval(travelClaimCreateInit.employee)
            .then(function (promise) {
                $scope.travelClaimCheckersApprovers = [];
                angular.forEach(promise.results.approvers, function (value, key) {
                    var data = {
                        name:value.code,
                        email: "",
                        type: 'checker'
                    }
                    $scope.travelClaimCheckersApprovers.push(data);

                });
                angular.forEach(promise.results.checkers, function (value, key) {
                    var data = {
                        name: value.code,
                        email: "",
                        type: 'approver'
                    }
                    $scope.travelClaimCheckersApprovers.push(data);
                });
                $scope.travelClaimApiCheckersApprovers = promise.results;

            });
    } else {
        $scope.travelClaimCheckersApprovers = travelClaimCreateInit.checkersApprovers;
        $scope.travelClaimApiCheckersApprovers = travelClaimCreateInit.checkersApprovers;
    }
}

开始方法“获取”错误“未定义响应”而 enter image description here

但几秒钟后它就返回了结果

enter image description here

【问题讨论】:

  • 发布的代码看起来不错。是否有任何其他与此相关的代码,使用名为 response 的东西。

标签: angularjs api xmlhttprequest


【解决方案1】:

您的服务代码有两个返回,因此实际返回的是 $http 承诺而不是 deferred.promise

所以目前在服务then() 中没有返回任何内容,因此您在控制器then() 中得到undefined

尝试将其更改为:

var getApproval = function (employee) {   
    // return $http promise
    return $http({
        method: 'GET',
        url: ICLAIM_DOMAIN + '/api/approval-chain/get-matrix?username=' + USERNAME_TRAVEL_CLAIM + '&password=' + PASSWORD_TRAVEL_CLAIM
        + '&department=' + employee.departmentId + '&location=' + employee.locationId
    }).then(function (response) {
        // return the actual data
        return response.data;
    });

}

请注意,GET 请求中没有内容,因此内容类型标头无用并已被删除

在您的控制器中,您应该真正将名为 promise 的变量更改为 data

【讨论】:

  • 谢谢,我试过这个代码,但它的错误仍然是相同的“未定义响应”
猜你喜欢
  • 1970-01-01
  • 2015-04-02
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-28
  • 2015-09-15
相关资源
最近更新 更多