2016-04-10 10 views
1

サーバからの情報を含むjsonを返すには私のサービスが必要です。サービスのAngularJSサービスでオブジェクト型を返すことはできません

コード:

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;    
      }   
      }) 
    } 
}) 

ここでは、コントローラからのコードがあります。

$scope.data2 = '{"func":"materialSons","material":"0"}'; 
    console.log(Server.fetch($scope.data2, $rootScope.token)); 
    $scope.materialist = Server.fetch($scope.data2, $rootScope.token); 

サーバーの成功へのリクエストが返されますが、関数は未定義です。 私もサービス中)の前に(フェッチreturn文を追加しようとしたこと、私がログに得たもの:

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

fetchメソッドにコールバック関数を提供します。 –

答えて

0

はあなた(フェッチ)メソッドは、現在、何も返しません。したがって、実際にはundefinedが返されます。

return文を追加します。それでは、関数が約束を返します。フェッチは非同期操作であるため、データを返すことはできません。それで、それは約束を返す。これは、呼び出し側がはそれではなく、あなたのコントローラ内部の今

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; 
    } 

を行うサービスのメソッドを呼び出すANスコープ変数と反復処理するデータを割り当てる必要があります

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

をしない必要があることを意味し/必要に応じて解析します。

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. 

}); 

JSON形式のヘッダーオブジェクトを明示的に設定する必要はありません。将来的にヘッダーを設定する必要がある場合は、$ httpメソッドでヘッダーを追加することで、いつでもヘッダーを設定することができます。 $ httpの詳細については、ngdocsを参照してください。

関連する問題