2016-06-11 13 views
0

を使用してヌルとレスポンスオブジェクトを取得し、私は私がデータを取得し、thenブロック内のコード 内トラフブラウザコンソールを調べることができるよにもかかわらずJSONデータトラフWebサービスに約束と.then

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

を取得していますデータを未定義にしています。

私はここで間違っていますか?

更新: 私のサービスコールは、この

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'コールバックから' return'することはできません。もしあなたがしたいのであれば、 '.then'を使ってください(私はここでそのコールバックの理由は全く見ませんが) – Bergi

答えて

0

のように見えますが、解決に渡しているデータは、オブジェクトではなく配列です。

オブジェクトには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. 
0

「データ」オブジェクトは、長さを持たないオブジェクトです。文字列または配列でなければならない場合は、文字列または配列のプロパティを持つオブジェクトかもしれません。デバッグ時に、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によって行われた約束を返却する必要があります()

関連する問題