2017-05-05 6 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-역할의 프런트 엔드를 실행하고 콘솔에서 정보] 가지고 :

,536을 분명히
Response {_body: Object, status: 200, ok: true, statusText: "Ok", headers: Headers…} 

은 "_body : 개체는"내가 원하는 데이터를 가지고 있으며, 같은 실제에서, 데이터는 같습니다

{"text":"hello,world"} 

그래서 내가 데이터를 얻기 위해 노력했지만의 관찰 가능한 연산자는 "가입" 이러한 방법이 있습니다 click here

그래서 내가 JSON 방법을 선택을,하지만 난 콘솔에서 다음을 가지고 : 나는 모든 m를 시도했다

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

모든 문제가 나타났다되지 않습니다 때 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 T ....를 놓쳤다. 다시 한 번 감사드립니다 ~~ – stephzcj