使用Angular 2和Http对象获取网页包含

时间:2017-01-05 03:56:27

标签: angularjs http

我是Angular 2框架中的新手,我尝试了解Http对象。 我遵循这里的教程:

http://www.joshmorony.com/using-http-to-fetch-remote-data-from-a-server-in-ionic-2/

它非常适合从提供此类数据的服务器检索JSON文件,但我想将HTML包含到变量中。我想拥有所有的html文件并解析它以获得一些信息。

当我通过这样的网站修改示例中的URL时:

this.http.request('https://www.google.ca/' ).map(res => res.text()).subscribe(data => {
    this.webPage = data.toString();
    console.log("data:" + data );
});

我收到了这个错误:

  

EXCEPTION:响应状态:URL为0:null

我使用好的API吗? 我做错了什么?

谢谢, 专利

1 个答案:

答案 0 :(得分:1)

这是一个CORS问题 完整的错误是:

XMLHttpRequest cannot load https://www.google.ca/. 
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'https://run.plnkr.co' is therefore not allowed access.  
EXCEPTION: Response with status: 0  for URL: null

您无法请求“https://www.google.ca/”,因为:1)当您在应用中发出http请求时,原点已被定义为您的主机,可能是“localhost”或您网站的主机。 2)'www.google.ca'是另一个来源,它没有设置'Access-Control-Allow-Origin',或者您网站的主机不在他们的'Access-Control-Allow-Origin'列表中。

如果你想要'www.google.ca'的html,你需要一个代理服务器,步骤是:1)在你的ng2应用程序中,你向代理服务器发送请求并要求它做... 2)您代理服务器请求'www.google.ca'并将html发送到您的ng2应用程序。

当代理服务器请求“www.google.ca”时,原点定义为“www.google.ca”。所以代理服务器可以获取html。