2013-07-26 15 views
13

私はAngularJSの新機能で、サーバーとやりとりするアプリケーションを構築しています。サーバーにはREST APIがありますが、いくつかのメソッドにはプレーンテキストで応答し、他のメソッドはJSONで応答します。私は、AngularJSの$resourceサービスを使って簡単なHTTPリクエストメソッドを実装しました。プレーンテキストサーバーの応答を処理する方法は?

ただし、サーバーの応答がプレーンテキストの場合、AngularJSの応答は応答語の各文字に対して1つのエントリを持つオブジェクトです。これを(良い方法で)回避するにはどうしたらいいですか?理想的には、いつプレーンテキストを期待するのか、JSONをいつ期待するのか、私のサービスに伝えることができ、両方のケースできれいにフォーマットされた応答を得ることができればと思います。

+1

私は全く同じ問題を抱えています。 RESTによると、POST操作の戻りオブジェクトは、新しく作成されたオブジェクトのURI(私の場合はIDのようなもの)でなければなりません。すべてのレスポンスがJSONであると仮定すると、$ resourceヘルパーのAngularはここで失敗します。私はカスタム応答ハンドラがこれを解決できると思います。それを試してみましょう。あなたの投稿を保つ;) – Pepster

答えて

17

$ resourceは、Restfulオブジェクトを操作するための便利なラッパーです。 JSONとして自動的に解析され、$リソース定義に基づいてオブジェクトが移入されます。

安価なリソースの場合は、$http serviceを使用する方がずっと楽です。

これは、そのような圧倒的なオブジェクトマッピングを持たない下位レベルのAPIです。

$http({method: "GET", url: "/myTextDocURL"}) 
    .success(function(data){ 
     // data should be text string here (only if the server response is text/plain) 
    } 
); 
+0

なぜ安らかなリソースのために?? –

11

によるdocumentationあなたはjavascriptオブジェクトにJSONからの応答を変換するためにあるデフォルトの動作をオーバーライドすることができ、リソースのためのカスタムアクションを指定します。 transformResponse関数の 'data'パラメータにはテキストペイロードが含まれます。

この場合、transformResponseメソッドは文字列自体ではなく文字列を含むオブジェクトを返します。そうしないと、文字列を配列に変換しようとします。

var Stub = $resource('/files/:filename', {}, {'getText': { 
     transformResponse: function(data, headersGetter, status) { 
      return {content: data}; 
     } 
    }}); 

リソースを使用するには)、カスタムのgetText()アクションではなく、昔ながらのget(コール:

Stub.getText({'filename': 'someFile.txt'}, function(response) { 
     console.info("Content of someFile.txt = " . response.content); 
    }); 

これは古い記事ですが、私はそれが新しい答えに値する考え出し。

+0

これはうまくいきましたが、私の場合はjsonデータをプレーンテキスト(目的)として返していましたが、$ httpはまだオブジェクトに変換されていましたが、このメソッドはうまく機能していました。機能。おかげで –

+0

ありがとう、魅力のように動作します! – Tobi

関連する問題