2017-05-05 3 views
1

まず、AJAXを使用して動作しますが、私はこれらのように、スプリング・ブート、コードを使用してサーバをコード化:私はAngular2とJSONPの応答からの身体データを取得することはできませんが、それは

public class App { 
@RequestMapping("/") 
@ResponseBody 
String home(HttpServletRequest request) { 
    String aa=request.getParameter("callback"); 
    System.out.println(request.getParameter("callback")); 
    return aa+"({\"text\":\"hello,world\"})"; 
} 
public static void main(String[] args) throws Exception { 
    SpringApplication.run(App.class, args); 
}} 

第二に、私はコード化されましたFRONT-END Angular2と:その後、

export class HomePage implements OnInit{ 
    constructor(private jsonp:Jsonp) { 
     } 
    ngOnInit(): void { 
    this.jsonp.get("http://localhost:8080/callback=JSONP_CALLBACK") 
     .subscribe(res=>console.log(this.res);  
);  
}} 

、私はNG-サーブでフロントエンドを実行して、コンソールからINFOMATIONました:

を明らか
Response {_body: Object, status: 200, ok: true, statusText: "Ok", headers: Headers…} 

、「_body:オブジェクトが」私が欲しいのデータを持っており、実際に、データは次のようになります。

{"text":"hello,world"} 

ので、私は、データを取得しようとしたが、観察可能のオペレータが唯一の「購読」これらの方法があります:click here

はので、私はJSONの方法を選択し、しかし、私は、コンソールからこれらを得た:私はすべてメートルをしようとした

function() { 
     if (typeof this._body === 'string') { 
      return JSON.parse(/** @type {?} */ (this._body)); 
     } 
     if (this._body instanceof ArrayBuffer) { 
      return … 

この奇妙なアプローチを除き、身体データをethodが、取得することはできません。もちろん

console.log(res._body.text); 

、それはエラーをコンパイルしているが、私は、データを得るか:click here

ときI上記のすべての問題が登場していませんAJAXを使用してこれを試してみました、私は簡単したがって、この

jQuery(document).ready(function(){ 
    $.ajax({ 
     type: "get", 
     async: false, 
     url: "http://localhost:8080/", 
     dataType: "jsonp", 
     jsonp: "callback", 
     jsonpCallback:"JSONP_CALLBACK", 
     success: function(json){ 
      console.log(json.text); 
     }, 
     error: function(){ 
      alert('fail'); 
     } 
    }); 
}); 

のようなデータを取得することができ、どのように私はrxjsの観測Angular2のあるJSONデータを取得し、またはこれはバグであることができますか?

答えて

1

あなただけのJSONとしてレスポンスをマッピングすることができるはずです。

this.jsonp.get("http://localhost:8080/callback=JSONP_CALLBACK") 
    .map(res => res.json()) 
    .subscribe(data => console.log(data)); 
+0

ああ、かわいいです!ありがとう、そんなに~~しかし、なぜ私は購読で "res.json()"を行うことができないのですか? – stephzcj

+0

あなたは '' .subscribe(res => console.log(res.json())); 'できますが、前のステップで購読して処理するために最終データを送るのがよりクリーンです。通常は、すべてのデータロードロジックをサービスに保持する方がよいでしょう。 Observableインスタンスを返す。コンポーネントでは、単純にサービスメソッドを呼び出し、それが提供するデータにサブスクライブします。したがって、コンポーネント内のデータを処理するのではなく、消費する必要があります。しかし、あなたの場合、あなたはこの呼び出しをコンポーネントにとにかく持っているので、余分なマップステップをスキップして、単にsubscribeで 'res.json()'を使用することができます。 – dfsq

+0

ええと...なぜ私は "res.json()"をやっていけないのか分かりますが、私は "T"を逃しました。もう一度ありがとう~~ – stephzcj

関連する問題