我无法通过Angular2从JSONP的响应中获取正文数据,但它的工作方式是使用ajax

时间:2017-05-05 08:59:23

标签: javascript jquery ajax angular jsonp

首先,我使用spring-boot对 SERVER 进行编码,代码如下:

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

其次,我使用Angular2编码 FRONT-END

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-serve中运行前端,并从控制台获取信息:

Response {_body: Object, status: 200, ok: true, statusText: "Ok", headers: Headers…}
显然,“_ body:Object”有我想要的数据,实际上,数据看起来像:

{"text":"hello,world"}

所以我试图获取数据,但是Observable的运算符“subscribe”只有这些方法: click here

所以我选择了json方法,但是我从控制台得到了这些:

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

我尝试了所有方法,但除了这种奇怪的方法外,无法获取身体数据:

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

那么,如何在Angular2中使用rxjs的Observable获取json数据,或者这是一个错误?

1 个答案:

答案 0 :(得分:1)

您应该能够将响应映射为JSON:

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