2013-06-16 33 views
7

Restangular POSTを送信した後の応答オブジェクトの取得方法を教えてください。Restangular POSTからの応答の取得

firstAccount.post("Buildings", myBuilding).then(function() { 
    console.log("Object saved OK"); 
}, function() { 
    console.log("There was an error saving"); 
}); 

私は新しいオブジェクトIDを取得しようとしています。

ありがとうございました。

答えて

17

私はRestangularの作成者です。 Flimは右です:)。約束で

は、あなたが得るオブジェクトは、サーバから返された:)

firstAccount.post("Buildings", myBuilding).then(function(addedBuilding) { 
    console.log("id", addedBuilding.id); 
}, function() { 
    console.log("There was an error saving"); 
}); 

感謝を!

+1

私の第二の例に示すように、応答オブジェクトが応答にメソッド.plain()を呼び出したい場合は、それは実際の応答だあなたは確かにありますか? 送信されたものとは異なるデータを返すAPIエンドポイントがあります。 promisse上の 私は 'post'で送られたものと同じデータを得ています。 –

+0

ねえ。実際、すべてのサーバレスポンスにRestangularメソッドが追加されています。それはそれをすばらしくするものの一部です。受け取ったすべてのオブジェクトは、Restangularで使用できるように強化されています。あなたの投稿が実際にサーバーから何も返さない場合は、私が実際に投稿した同じオブジェクトを返すので、何かを得ることができます。したがって、投稿しているデータとまったく同じデータを取得している場合は、サーバーからデータを戻していることを確認して[OK]をクリックします。 – mgonto

+0

私は、apiが受け取ったものとは異なるフォーマットでデータを返すので、これに気付きました。例: '{'category': 'asd'}'を受け取り、 '{category:{id:1、name: 'asd'}'を返します。それはngResourceで働いていましたが、私がrestangularに移動したときに、応答は '{'category': 'asd'}'となって壊れました。 –

2

私はRestangularで直接作業していませんが、あなたのPOSTはおそらくIDを持つJSONオブジェクトを返す必要があります。成功関数はそれをパラメータとして受け入れる必要があります。

firstAccount.post("Buildings", myBuilding).then(function(resp) { 
    console.log(resp.id); // if the JSON obj has the id as part of the response 
}); 
0

POSTを繰り返すと、投稿されたものと同じオブジェクトが応答することが予想されます。

これは、タイプコピー定義ではっきりとわかります。タイプのオブジェクトを受け取るメソッドがあり、それをhttp://whatever/api/objectsのようなURLにPOSTする予定のメソッドがあるとします。 REST APIが同じか異なることができるレスポンスオブジェクトを持つ201とjsonを返したとします。我々の場合、返される型はITypeBとする。 次に、標準的なのPOSTを使用することができず、ITypeBの応答を期待するので、restangularはITypeA(投稿されたものと同じ)の応答を受け取ると予想されるため、次のコードは正しくありません。上記のコードは次のように正しいだろうので、customPOSTを使用して解決することができ

public postAnObject(objectToPost: models.ITypeA): ng.IPromise<models.ITypeB> { 
    return this.restangular.all("objects") 
      .post<models.ITypeA>(objectToPost) 
      .then((responseObject: models.ITypeB) => { 
       return responseObject; 
      }, (restangularError: any) => { 
       throw "Error adding object. Status: " + restangularError.status; 
      }); 
} 

public postAnObject(objectToPost: models.ITypeA): ng.IPromise<models.ITypeB> { 
    return this.restangular.all("objects") 
      .customPOST(objectToPost) 
      .then((restangularizedObjectTypeB: restangular.IElement) => { 
       return restangularizedObjectTypeB.plain(); 
      }, (restangularError: any) => { 
       throw "Error adding object. Status: " + restangularError.status; 
      }); 
} 

注目すべきいくつかのことを要約すると、あります

  1. Restangle can 成功したコールバックで応答オブジェクトを取得then部分)
  2. .post(objectA)メソッドを使用している場合は、objectAと同じタイプの応答を持つ成功したコールバックがあると想定します(存在する場合)。
  3. あなたが.customPOST(objectA)
  4. 重要な方法使用をObjectAを投稿したが、応答をObjectB(異なる種類)を取得したい場合は、次の応答は実際には「本物の」応答オブジェクトをラップ「restangularized」オブジェクトです。つまり、応答にはいくつかの奇妙な方法が含まれています。あなたは、単に応答が実際にITypeBオブジェクトではなく、restangular.IElement
関連する問題