【发布时间】:2019-02-18 04:37:45
【问题描述】:
我认为互联网上到处都有类似的主题,但我只是花了 1 小时搜索,仍然无法解决这个问题。
我无法使用 Angular 在我的服务器(Apache 和 PHP)上使用 POST 发出请求。
我在节点 10、apache 2.4 和 php 7.1 中使用 angular/cli v.6.2.1
这是来自 Http 调用的简单代码(HttpClient 和 HttpHeaders 都来自 @angular/common/http):
constructor(private http: HttpClient){}
this.http.post('http://localhost/distributor.php', ['prop1':'value1', 'prop2':'value2'], {headers: new HttpHeaders().set('Access-Control-Allow-Origin','*')}).subscribe(
data => {
console.log(data);
},
err => {
console.log('error');
});
}
我只是尝试通过这种方式从 PHP 发送回一些东西:
<?php
$data = $_POST;
echo json_encode($data);
我已经允许 apache 配置文件中的所有来源。 在“OPTIONS”预检之后,Firefox 和 Chrome 都让我失望了,不做任何其他事情,PHP 文件没有返回。
这是 FireFox 向我展示的内容:
我可以在网络标签中看到这个:
响应选项卡显示一个完全空的框。
我可以从我的 http.post 中删除自定义标头的部分,它不会改变任何内容。
让我觉得奇怪的是,我可以单击 FireFox 编辑和重新发送按钮,而无需更改任何内容,并且出现了正确的结果...
感谢阅读/帮助
【问题讨论】:
-
您需要在 PHP 代码中调用
header("Access-Control-Allow-Origin: *);,而不是在客户端。否则任何人都可以轻松地完全绕过 CORS。 -
它没有任何改变。我已经按照您在我的 PHP 文件顶部提到的方式将它放在了我的 PHP 文件顶部,并且没有任何变化。顺便说一句,正如您在“响应标头”部分中看到的那样,“Access-Control-Allow-Origin”设置为 *...
-
@Julo0sS 也请出示您的 php 代码
-
另外,检查控制台是否有错误信息
标签: javascript php angular cors xmlhttprequest