Angular 2 Http Post请求中的混淆

时间:2016-10-29 02:25:22

标签: php angular

首先。请忍受我的问题。

我正在做的只是执行ajax请求,该请求将返回字符串的响应数据。

这是我的php

<?php
     header('Access-Control-Allow-Origin: *');

     echo 'Peenoise Crazy';
?>

Http请求

let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' });
let options = new RequestOptions({ headers: headers });
return this.http.post('./app/parsers/peenoise.php', '', options)
    .then(val => console.log(val))

这不起作用。但是,如果我将网址更改为此http://localhost:8912/app/parsers/peenoise.php。它有效。

问题

  1. 为什么./app/parsers/peenoise.php不起作用?
  2. 如果我将网址更改为http://localhost:8912/app/parsers/peenoise.php。为什么我需要放header('Access-Control-Allow-Origin: *')?它位于我的应用程序的同一文件夹中。
  3. 如何使用http.post而不传递http://localhost:8912/route/to/phpfolder.php的网址?
  4. 任何帮助将不胜感激。请指导我这个。感谢

2 个答案:

答案 0 :(得分:0)

发布需要完整或相对的网址才能生效。您可以使用:

this.http.post('/parsers/peenoise.php', '', options)

答案 1 :(得分:0)

实际上,Angular会查找后端服务器来发布数据,因此想法在您的帖子请求中如下所示

this.http.post('./app/parsers/peenoise.php', '', options).then(val => console.log(val))

它会尝试在该位置发布帖子请求 想象你在localhost上提供角度:4200

http://localhost:4200/app/parsers/peenoise.php

现在回答你的问题:

1)./app/parsers/peenoise.php无法正常工作,因为它实际上是在尝试从后端服务中找到它

2)每当您向其他服务器发出http请求时,您需要header('Access-Control-Allow-Origin: *'),而不是您网站当前正在使用的服务器,如果您不使用该服务器,则需要{i}}最终得到Connection_refused_Error

3)如果你想只使用角度,那么有mockAckends,in-memory-web-api

使用mockBackEnd的示例是 here