2016-06-11 4 views
0

I json Daten Trog WebserviceVersprechen und bekommen Antwort Objekt als null mit .then

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

Auch bin immer wenn ich in der Lage bin Daten zu erhalten und prüfen Trog Browser-Konsole innerhalb Code in then Block I bekomme Daten als undefiniert.

Was mache ich hier falsch?

Update: meine Service-Aufruf sieht wie folgt aus

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

Wie sieht Ihr Servicecode aus? Bringst du ein Versprechen zurück? – Seonixx

+0

Sie geben kein Versprechen von getData() zurück, daher können Sie die then-Methode nicht verwenden. Passen Sie Ihren Dienst an, um das HTTP-Versprechen und nicht die Daten zurückzugeben. – Seonixx

+0

Sie können nicht von einem 'Erfolg' Rückruf zurückkommen. Wenn Sie möchten, verwenden Sie '.then '(obwohl ich hier überhaupt keinen Grund für diesen Rückruf sehe) – Bergi

Antwort

0

die Daten, die Sie auf die Entschlossenheit sind vorbei ein Objekt ist und kein Array.

Objekte haben keine length -Eigenschaft, die Aufruflänge für ein Objekt gibt Ihnen undefined, es sei denn, Sie haben eine length -Eigenschaft zugewiesen.

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

Die einzige Sache, die in den Sinn kommt, ist, dass "Daten" -Objekt ein Objekt ist, das keine Länge hat. Wenn es sich um eine Zeichenfolge oder ein Array handeln sollte, ist es möglicherweise ein Objekt mit der Eigenschaft String oder Array. Überprüfen Sie beim Debuggen, wo sich Daten befinden, die Sie interessiert, und ermitteln Sie sie, bevor Sie die Längeneigenschaft verwenden.

Beispiel:

data.myProperty.length 
0

diese stattdessen tun:

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

dies ist Ihr Service:

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

Sie müssen das Versprechen von $ http.post zurückzukehren()

Verwandte Themen