JSONP call => ReferenceError:未定义文档

时间:2016-03-09 13:42:15

标签: typescript jsonp angular

对于我的实习,我被要求开发基于该网站(www.claroline.net)的移动应用程序。我必须使用的技术是Nativescript与Angular 2的结合。我设法实现了登录功能,因此网站的用户现在可以在应用程序上登录。

然后我必须能够在应用程序上获得网站的通知。一开始我只想在JSON数组中显示通知。我已经有了获取JSON数组的URL(get请求可以在浏览器上运行)但是当我从移动应用程序执行此操作时,我收到500错误。

然后我听说JSONP可以帮助我解决我的问题。显然,有几件事情要做: - 在根组件中导入JSONP_PROVIDERS并引导它 - 在要进行Jsonp调用的组件中导入Jsonp - 在网址

中添加回调参数

我错过了什么吗?因为即使我做了所有这些,我在控制台中出现错误:“ReferenceError:文档未定义”在某些Javascript文件中这很奇怪,因为我在Typescript中编码,没有变量称为文档。

1 个答案:

答案 0 :(得分:3)

以下是在Angular2中使用JSONP支持的方法。

在调用JSONP_PROVIDERS函数时注册bootstrap后:

import {bootstrap} from 'angular2/platform/browser'
import {JSONP_PROVIDERS} from 'angular2/http'
import {AppComponent} from './app.component'

bootstrap(AppComponent, [ JSONP_PROVIDERS ]);

然后,您可以使用从构造函数中注入的Jsonp类的实例来执行请求:

import {Component} from 'angular2/core';
import {Jsonp} from 'angular2/http';

@Component({
  selector: 'my-app',
  template: `
    <div>
      Result: {{result | json}}
    </div>
  `
})
export class AppComponent {
  constructor(jsonp:Jsonp) {
    var url = 'https://...&c=JSONP_CALLBACK';
    jsonp.request(url, { method: 'Get' })
     .subscribe((res) => {
       this.result = res.json()
     });
  }
}

在您的情况下,c参数可以有其他名称,但您需要在其中设置JSONP_CALLBACK值。

请参阅此plunkr:http://plnkr.co/edit/dqreqBL6kyNkR8Z2wgGR?p=preview