承诺并使用.then将响应对象作为null

时间:2016-06-11 15:07:19

标签: javascript angularjs angular-promise angular-http

我通过网络服务获取json数据

myService.getData()  
          .then(function(data, status, headers, config){ 
           alert(data.length);
    }...

即使我能够获取数据并通过代码中的浏览器控制台进行检查 在then块中,我将数据视为未定义。

我在这里做错了什么?

更新: 我的服务电话看起来像这样

 return $http.post("http:/...", {
                  headers: {'Authorization': 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==' }
              }).success(function(data, status, headers, config){ 
                  return data;
              }).error(function(data, status, headers, config){
                  alert('err');
              });

3 个答案:

答案 0 :(得分:0)

您传递给resolve的数据是一个对象,而不是一个数组。

对象没有length属性,在对象上调用length会给你undefined,除非你为它指定了一个length属性。

var arrayLike = ['a', 'b']
console.log(arrayLike.length)
//outputs: 2

var objectLike = { "a": 1, "b": 2 }
console.log(objectLike.length)
// outputs: undefined (no length property on the object, only a and b.

答案 1 :(得分:0)

唯一想到的是'数据'对象是一个没有长度的对象。如果它应该是字符串或数组,那么它可能是具有字符串或数组属性的对象。调试时检查您感兴趣的数据在哪里,并在使用length属性之前获取它。

示例:

data.myProperty.length

答案 2 :(得分:0)

请改为:

myService.getData()  
      .success(function(data, status, headers, config){ 
              alert(data.length);
          }).error(function(data, status, headers, config){
              alert('err');
          })...

这是您的服务:

return $http.post("http:/...", {
              headers: {'Authorization': 'Basic      QWxhZGRpbjpvcGVuIHNlc2FtZQ==' }
          });

您需要返回$ http.post()

所做的承诺