【问题标题】:AngularJS HTTP Resource - Response Function UndefinedAngularJS HTTP 资源 - 响应函数未定义
【发布时间】:2015-04-02 19:08:36
【问题描述】:

我正在使用 Angular HTTP 资源从 API 获取一些数据。 API 上的方法实际上是一个 PUT,但返回一个数据数组。 (注意,这不是我的 API)

它完美地执行了 HTTP 调用,我可以在 Google Developer Tools 的网络中看到我的响应是正确的。但是,在尝试使用响应数据时,我不断收到“TypeError: undefined is not a function”。

以下是我尝试过的一些不同方法,每种方法都给出相同的 TypeError:

HTTP 资源

.factory('Sports', ['$resource', 'SPORTS_CONFIG',
    function($resource, SPORTS_CONFIG) {
        return $resource(SPORTS_CONFIG.URL, {}, {
            get: {
                method: 'PUT', 
                isArray: true 
            }
        });
    }
])

Angular JS 尝试

// Construct Sports Body
var s = new Sports($scope.sport);

// Attempt 1
s.$get({}, function(data){

});

// Attempt 2
s.$get({}).then(function(data){

});

// Attempt 3
s.$get({}).$promise.then(data){

});

编辑

在查看了我的错误代码之后,我的 HTTP 资源中的“isArray”似乎发生了错误。当我将 isArray 设置为 false 时,它​​会出错,因为它需要一个对象但得到一个数组。当我保持真实时,它会出错并说 TypeError: undefined is not a function。当我单击 javascript 行时,它是“isArray”。

第二次编辑

我已经使用以下代码使其工作:

$scope.teams = Sports.get($scope.sport);

但是,$scope.teams = [0, $promise, $resolved] 。我怎样才能只得到 [0] 而不是 $promise 和 $resolved?

【问题讨论】:

  • 你试过 s.$get().success(function(data, status, headers, config) { }); ?
  • 我已经添加了 s 是什么、$http 资源以及对错误位置的更新。你能看看修改吗?
  • 您能告诉我们,您收到的PUT 回复是什么?
  • 状态:200 OK 响应:[{"name": Football, "id": 2}]
  • 我假设响应是 [{"name": "Football", "id": "2"}] (注意引号)。如果不是,那么响应是错误的。使用JSON Lint进行验证

标签: javascript angularjs angular-http


【解决方案1】:

'then' 函数的参数本身应该是一个函数。

例如:

s.$get({}).then(function (data){

});

【讨论】:

  • 我添加了 s 是什么、$http 资源以及对错误位置的更新。你能看看修改吗?
【解决方案2】:

您的语法看起来不对,请改用以下方法:

$http.get('/someurl').then(function(response) {
        //do something with response.data;
      }, function(errResponse) {
        console.error('Error while fetching data');
      });

如您所见,您应该传入一个函数,该函数会传入来自服务器的响应,然后您就可以获取您的数据了。

【讨论】:

  • 我添加了 s 是什么、$http 资源以及对错误位置的更新。你能看看修改吗?
【解决方案3】:

你可以试试这样的(带函数)

$http({
        method : "GET",
        url : "your_url"
    }).success(function(data, status, headers, config) {
        $scope.yourVariable= data;
    }).error(function(data, status, headers, config) {
        alert("Request failed. HTTP status:" + status);
    });

【讨论】:

  • 我已经添加了 s 是什么、$http 资源以及对错误位置的更新。你能看看修改吗?
【解决方案4】:

由于上述编辑,此答案已过时。

由于我现在无法发表评论,因此获得您想要的第一个项目的方法很简单: $scope.teams = Sports.get($scope.sport)[0];

【讨论】:

  • 我添加了 s 是什么、$http 资源以及对错误位置的更新。你能看看修改吗?
猜你喜欢
  • 1970-01-01
  • 2016-07-19
  • 2020-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
  • 2013-05-28
  • 1970-01-01
相关资源
最近更新 更多