2016-06-11 2 views
0

Я получаю корыто JSON данные веб-службеобещания и получить объект ответа в нуле с помощью .then

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

Несмотря на то, что я в состоянии получить данные и изучить консоль корыта браузера внутри кода в then блоке I 'Получать данные как неопределенные.

Что я здесь делаю неправильно?

Update: мой вызов службы выглядит следующим образом

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

Как выглядит ваш код обслуживания? Вы возвращаете обещание? – Seonixx

+0

Вы не возвращаете обещание от getData(), поэтому вы не можете использовать метод then. Откорректируйте свою службу, чтобы вернуть обещание HTTP, а не данные. – Seonixx

+0

Вы не можете «вернуть» из обратного вызова «success». Если вы хотите, используйте '.then' (хотя я вообще не вижу причин для этого обратного вызова) – Bergi

ответ

0

данные, которые вы передаете в решимость является объектом, а не массив.

объекты не имеют свойства длины, длина вызова объекта не даст вам неопределенного значения, если на нем не указано свойство длины.

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. 
0

Единственное, что приходит в голову, это то, что объект data является объектом, который не имеет длины. Если это строка или массив, то, возможно, это объект, который имеет свойство string или array. При отладке проверяйте, где находятся данные, которые вас интересуют, и получите их перед использованием свойства length.

пример:

data.myProperty.length 
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()

Смежные вопросы