Angular 7 - http-сообщения - внутри заголовков не отправляется PAYLOAD

Я только что создал проект angular 7

Пытаюсь отправить пост с некоторыми данными, в шапке ничего не указано

поэтому на стороне сервера я получаю только вызов php-скрипта, ничего в массиве $_POST

этот код отлично работает в angular 5, я должен видеть данные в журнале заголовков в chrome

    createPostOptions() {
        let headers = new Headers({
            'Content-Type': 'application/json',
        });

        let options = new RequestOptions({ headers: headers, withCredentials: true });
        return options;
    }

    getParts(): Observable<any> 
    {
        return this.http.post('http://localhost/site/data.php',{command:'getParts'}, this.createPostOptions())
            .pipe(map((response: Response) => {
                return this.processData(response,this.router);
            }));
    }

php-код:

function cors()
{
    header("HTTP/1.1 " . "200" . " " . "OK");
    header("Access-Control-Allow-Methods: GET, POST, OPTIONS");    
    header('Access-Control-Allow-Headers: Accept, Content-Type, Access-Control-Allow-Credentials, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Access-Control-Allow-Methods, X-Requested-With, X-API-KEY, X-Auth-Token, X-Requested-With, Authorization, Content-Range, Content-Disposition, Origin, Access-Control-Request-Method');
    header('Access-Control-Max-Age: 86400');
    header('Access-Control-Allow-Origin: '."http://localhost");
    header('Access-Control-Allow-Credentials: true');   
}

//-----------------------------------

if($_SERVER['REQUEST_METHOD']=="OPTIONS")
{
    cors();
}
else
{
    ...
}

введите здесь описание изображения Я должен увидеть что-то вроде этого

введите описание изображения здесь Любая помощь приветствуется


person phil123456    schedule 21.11.2018    source источник
comment
где вы используете createPostOptions ?   -  person Pardeep Jain    schedule 21.11.2018
comment
'Access-Control-Allow-Origin': '*' это ерунда. Access-Control-Allow-Origin — это заголовок ответа, а не заголовка запроса.   -  person Quentin    schedule 21.11.2018
comment
@Quentin, Квентин, все явно упустили это из виду, проблема не в php, а в том, что angular не отправляет данные через заголовки и, насколько я знаю, не является дубликатом ... Я обновил вопрос, пожалуйста, посмотрите на него еще раз.   -  person phil123456    schedule 22.11.2018
comment
@ phil123456 — Angular не отправляет данные, потому что PHP не отвечает на предварительный запрос OPTIONS с разрешением на отправку данных. Дубликат добавлен для этой другой проблемы.   -  person Quentin    schedule 22.11.2018
comment
Я обновил свой вопрос, действительно забыл о корсе, но все еще не работает   -  person phil123456    schedule 22.11.2018


Ответы (1)


Поскольку вы отправляете json в теле, а не в качестве параметров сообщения, вам нужно что-то вроде

$jsonInput = file_get_contents('php://input');
$obj = json_decode($jsonInput);
$command = $obj->command;
person David    schedule 21.11.2018
comment
правильно, совсем забыл ответы, где в этом случае должен был идти php://input ... спасибо, вы сделали мой день :-) - person phil123456; 22.11.2018
comment
но он решает только часть php, проблема также на угловой стороне... в заголовке данные не отправляются - person phil123456; 22.11.2018
comment
@ phil123456 phil123456 После вашего обновления теперь другой вопрос ... Проблема была в php .... какой именно заголовок вы ожидаете в запросе OPTIONS? - person David; 22.11.2018
comment
только что снова обновился, я забыл скопировать код cors из моего проекта angular 5, но, хотя я отвечаю электронными заголовками CORS, фактический метод POST не выполняется хромом... все еще копаю - person phil123456; 22.11.2018
comment
по-видимому, Access-Control-Request-Headers: заголовки-разрешения-управления-доступом, методы-разрешения-управления-доступом не отправляются - person phil123456; 22.11.2018
comment
@ phil123456 Chrome обычно добавляет ошибку в консоль. Может быть, это потому, что вы забыли добавить порт (4200) для разрешения происхождения в вашей функции cors - person David; 22.11.2018
comment
да только что нашел, глупо с моей стороны, спасибо теперь работает - person phil123456; 22.11.2018