Angular 4 Http POST не работает

Надеюсь, у всех все хорошо. Недавно я начал работать с angular 4.4, я пытался отправлять данные на свой сервер api, но, к сожалению, это не работает. Я потратил на это около 2 дней, но все равно безуспешно. И уже попробовали 6-7 статей даже из angular.io. Я пробовал как Http, так и Httpclient, но ничего не работает.

Проблема в том, что всякий раз, когда я пытаюсь отправить данные на свой сервер, Angular выполняет запрос типа http OPTIONS вместо POST.

this.http.post('http://myapiserver.com', {email: '[email protected]'}).subscribe(
    res => {
        const response = res.text();
    }
);

И я также пытался отправить пользовательские параметры с запросом, но все равно безуспешно.

const headers = new Headers({ 'Content-Type': 'x-www-form-urlencoded' });
const options = new RequestOptions({ headers: headers });
options.method = RequestMethod.Post;
options.body = {name: 'Adam Smith'};
//options.body = JSON.stringify({name: 'Adam Smith'}); // i also tried this
//options.body = 'param1=something&param2=somethingelse'; // i also tried this

Я использовал ASP.NET core 2.0, но поскольку он не работал, я также попробовал простой код php. Вот код на стороне сервера для php. И это тоже не работает.

<?php
print_r($_POST);
?>

Примечание. Cors также включены на сервере. Кроме того, я также пробовал простой запрос на получение, и он работал отлично.

Я очень признателен за помощь.

заранее спасибо


person Osama Sheikh    schedule 12.10.2017    source источник
comment
OPTIONS - это запрос на предполетную проверку, если все в порядке, он выполнит POST после. Вы уверены, что конфигурация CORS верна? Какие результаты вы видите, не могли бы вы раскрыть тему не работает с помощью минимального воспроизводимого примера ?   -  person jonrsharpe    schedule 12.10.2017
comment
Получаете ли вы какой-либо странный ответ / заголовок из ответа OPTIONS?   -  person sz tech    schedule 12.10.2017
comment
Вот угловая отправка запроса pasteboard.co/GOBkz3Z.png И ответ пустой Array () (поскольку Я использую print_r ($ _ POST) на стороне сервера (php).   -  person Osama Sheikh    schedule 12.10.2017
comment
Возможный дубликат Angular2 - параметры запроса Http POST   -  person AJT82    schedule 14.10.2017


Ответы (3)


Я решил это, установив Content-Type на application/x-www-form-urlencoded:

  const headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' });
  const options = new RequestOptions({ headers: headers });
  const params = new URLSearchParams();
  params.append('mypostField', 'myFieldValue');
  http.post('myapiendpoint.com', params, options).subscribe();
person Osama Sheikh    schedule 12.10.2017

Вы пробовали передавать заголовки в качестве третьего аргумента в методе публикации:

this.http.post('http://myapiserver.com', JSON.stringify({name: 'Adam Smith'}), { headers: new Headers({ 'Content-Type': 'application/json' }) }).subscribe(
    res => {
        const response = res.text();
    }
);

убедитесь, что вы импортируете заголовки из @ angular / http

person JayDeeEss    schedule 12.10.2017
comment
да, я уже пробовал, не работает. И для двойной проверки я просто попробовал еще раз, но он вообще не работает. Его отправка запроса ajax в типе HTTP-запроса OPTIONS. - person Osama Sheikh; 12.10.2017
comment
он отлично попадает на сервер, но с неправильным методом http OPTIONS, когда он должен быть POST. Проверьте снимок экрана с тем, что отправляет angular, если я запустил указанный выше код pasteboard.co/GOBkz3Z.png - person Osama Sheikh; 12.10.2017
comment
проверьте этот ответ, может быть полезно! ссылка - person JayDeeEss; 12.10.2017
comment
наконец-то я смог решить проблему, большое спасибо за вашу помощь, ребята - person Osama Sheikh; 12.10.2017
comment
отличный ! - Вы должны публиковать свое решение всякий раз, когда у вас будет время для будущих ссылок! - person JayDeeEss; 12.10.2017
comment
только что сделал :-), еще раз спасибо! очень признателен за помощь. - person Osama Sheikh; 12.10.2017

У меня была такая же проблема, и я использовал это. (Используя FormData) попробуйте. Это работает для меня.

let formdata = new FormData();
formdata.append('email', '[email protected]');

this.http.post('http://myapiserver.com', formdata).subscribe(
    res => {
        const response = res.text();
    }
);
person Reshan    schedule 30.05.2018