簡體   English   中英

CORS問題-Angular / PHP / Apache

[英]CORS Issue - Angular / PHP / Apache

我認為互聯網上到處都有很多類似的話題,但是我只是花了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配置文件中。 Firefox和Chrome都只是在“ OPTIONS”預檢后讓我失望,並且不執行其他任何操作,也沒有從PHP文件返回任何內容。

這是FireFox向我展示的內容:

在此處輸入圖片說明

我可以在“網絡”標簽中看到以下內容:

在此處輸入圖片說明

響應選項卡顯示一個完全空白的框。

我可以從http.post中刪除自定義標頭的部分,它什么都不會改變。

對我來說似乎很奇怪的是,我可以單擊FireFox編輯並重新發送按鈕,而無需進行任何更改即可顯示正確的結果...

感謝您的閱讀/幫助

首先,您需要修復POST數據; 您在對象語法周圍有方括號。

const data = { 'prop1': 'value1', 'prop2': 'value2' };
this.http.post('http://localhost/distributor.php', data).subscribe(
  reply => {
    console.log(reply);
  },
  err => {
    console.log('error', err);
  });

接下來,您需要添加適當的標頭並設置PHP以處理JSON:

<?php
header('Access-Control-Allow-Headers: Access-Control-Allow-Origin, Content-Type');
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json, charset=utf-8');

// grab JSON data sent by Angular
$data = json_decode(file_get_contents('php://input'), true);
// add numeric data
$data["prop3"] = 3;
// reply
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_NUMERIC_CHECK);

這對我有用。

我有同樣的問題,但是通過將這些行添加到您的php代碼中來解決了

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: X-Requested-With');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
header('Content-Type: application/json');

let data = {
            'prop1': 'value1',
            'prop2': 'value2'
        };
        return this.http.post('http://localhost/distributor.php', data, {headers: new HttpHeaders().set('Access-Control-Allow-Origin', '*')}).map((response: Response) => {
            let data = response;
            if (data) {
                console.log(data);
            }
        })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM