Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何从另一个域脚本调用api?_Angularjs_Typescript_Angular - Fatal编程技术网

Angularjs 如何从另一个域脚本调用api?

Angularjs 如何从另一个域脚本调用api?,angularjs,typescript,angular,Angularjs,Typescript,Angular,我想使用angular2 typescript从另一个域调用web服务。 我使用以下代码来调用api var req_dict = { method: RequestMethod.Get, url: 'http//127.0.0.1:5000/users/', headers: this.head } var options = new RequestOptio

我想使用angular2 typescript从另一个域调用web服务。 我使用以下代码来调用api

    var req_dict = { 
               method: RequestMethod.Get,
               url: 'http//127.0.0.1:5000/users/',
               headers: this.head
              }
    var options = new RequestOptions(req_dict);
    var req = new Request(options);
    this.http.request(req).subscribe({});
我在http//127.0.0.1:8000中托管了我的应用程序。我想使用端口5000的api。当我检查控制台时,请求将
我只想调用http//127.0.0.1:5000/users/。在angular2中如何通过绝对url调用api?

事实上,这不是TypeScript或angular2的问题,而是CORS的问题。这些博客文章可以帮助您详细了解其工作原理:

简而言之,在跨域请求的情况下,浏览器会自动在请求中添加一个
Origin
头。有两种情况:

  • 简单请求。如果我们使用HTTPGET、HEAD和POST方法,则此用例适用。对于POST方法,仅支持具有以下值的内容类型:
    text/plain
    application/x-www-form-urlencoded
    multipart/form data
  • 预引导请求。当“简单请求”用例不适用时,会发出第一个请求(使用HTTP选项方法)来检查在跨域请求的上下文中可以做什么
因此,实际上大部分工作必须在服务器端完成,才能返回CORS头。主要的是
访问控制允许原点
一个

200 OK HTTP/1.1
(...)
Access-Control-Allow-Origin: *
要调试此类问题,可以在浏览器中使用开发人员工具(网络选项卡)

关于Angular2,只需像任何其他请求一样使用
Http
对象(例如相同的域):

希望它能帮助你,
Thierry

检查您的url
url:'http//127.0.0.1:5000/users/'
应该是
url:'http://127.0.0.1:5000/users/“
即使您使用http,它也应该是
url:”http://127.0.0.1:5000/users/“
噢。。是 啊谢谢workedYes,即使url格式正确,由于端口不同,CORS也会发挥作用。另一方面(IMHO),在
http.get
上使用
subscribe
可能会阻止组件渲染。也许更好的方法是在组件上使用
async
管道。
return this.http.get('https://angular2.apispark.net/v1/companies/')
           .map(res => res.json()).subscribe(
  ...
);