2016-04-10 9 views
1

Ich brauche meinen Dienst, um einen JSON mit Informationen vom Server zurückzugeben.Kann keinen Objekttyp im AngularJS-Dienst zurückgeben

Code of Service:

app.service('Server', function() { 

    this.fetch = function (data, token) { 
    fetch('http://104.197.58.108:8080', { 
      method: 'post', 
      headers: { 
       'Accept': 'application/json', 
       'Content-Type': 'application/json' 
      }, 
      body: JSON.stringify({ 
       data: data, 
       token: token 
      }) 
     }) 
      .then(function(response) { 
      return response.json() 
      }).then(function(text) { 
      if (text.success == false) { 
       return false; 
      } else { 
       return text;    
      }   
      }) 
    } 
}) 

Hier Code von der Steuerung.

Anforderung an Server-Erfolge, aber Funktion kehrt undefined zurück. Ich habe versucht, auch das Hinzufügen return-Anweisung vor fetch() in Dienst und das, was ich in log bekam:

Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined} 
+0

Stellen Sie der Abrufmethode eine Rückruffunktion bereit –

Antwort

0

Ihr holen() -Methode zur Zeit noch nichts zurückgibt. In der Tat gibt es undefined zurück.

Sie also eine Return-Anweisung hinzufügen. Und das wird die Funktion ein Versprechen geben. Es kann keine Daten zurückgeben, da ein Abrufvorgang ein asynchroner Vorgang ist. Es gibt also ein Versprechen. Das bedeutet, dass der Anrufer muss nicht tun

$scope.materialist = Server.fetch($scope.data2, $rootScope.token); 

Es muss stattdessen

Server.fetch($scope.data2, $rootScope.token).then(function(data) { 
    $scope.materialist = data; 
}); 
0
app.service('Server', function ($http) { 

    this.getData = function(){ 
    var promise = $http({ 
    method : 'GET', 
    url: 'http://104.197.58.108:8080' 
    }).then(function(data){ 
     return data; 
    }, function(error){ 
     return error; 
    }); 
    return promise; 
    } 

Jetzt in Ihrem Controller tun, rufen Sie die Methode der Dienst eine Zuordnung der Daten auf den Umfang variabel und iterate/parse wie nötig.

Server.getData().then(function(response){ 

$scope.fetchedData = response; 

//Open the Sources tab by pressing in dev tools and see the format of the response by setting debugger points. 
// or $scope.fetchedData and parse and assign the values accordingly. 

}); 

Ich glaube nicht, dass Sie Header-Objekte explizit für JSON-Format festlegen müssen. Falls Sie in Zukunft Header setzen müssen, können Sie dies immer tun, indem Sie das in der $ http-Methode in etwa dem gleichen Format wie Sie hinzufügen. Weitere Informationen zu $ ​​http finden Sie unter ngdocs

Verwandte Themen