Вот мой код:
import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';
logIn(username: string, password: string) {
const url = 'http://server.com/index.php';
const body = JSON.stringify({username: username,
password: password});
const headers = new HttpHeaders();
headers.set('Content-Type', 'application/json; charset=utf-8');
this.http.post(url, body, {headers: headers}).subscribe(
(data) => {
console.log(data);
},
(err: HttpErrorResponse) => {
if (err.error instanceof Error) {
console.log('Client-side error occured.');
} else {
console.log('Server-side error occured.');
}
}
);
}
и вот отладка сети:
Request Method:POST
Status Code:200 OK
Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Content-Length:46
Content-Type:text/plain
и данные хранятся в «Request Payload», но на моем сервере не получены значения POST:
print_r($_POST);
Array
(
)
Я полагаю, что ошибка происходит из-за заголовка, не установленного во время POST, что я сделал не так?
angular
http-headers
angular-httpclient
Frennetix
источник
источник
Ответы:
Экземпляры нового
HttpHeader
класса являются неизменяемыми объектами. Вызов методов класса вернет новый экземпляр в качестве результата. В общем, вам нужно сделать следующее:или
Обновление: добавление нескольких заголовков
или
Обновление: принять карту объекта для заголовков и параметров HttpClient
С 5.0.0-бета.6 теперь можно пропустить создание
HttpHeaders
объекта и напрямую передать карту объекта в качестве аргумента. Так что теперь можно сделать следующее:источник
set
название метода несколько вводит в заблуждение.HttpHeaders().set(..).set(..)
но теперь снова заголовки не записываются в поля заголовка HTTP ?!Чтобы добавить несколько параметров или заголовков, вы можете сделать следующее:
источник
lazyUpdate
свойстве, но в конечном итоге это приведет к сбою, заCreateListFromArrayLike
исключением случаев, когда запрос будет эффективным при подписке на него.установите заголовки http как показано ниже в вашем запросе http
источник
Я долго боролся с этим. Я использую Angular 6, и я обнаружил, что
не сработало. Но что работало
сделал, что имеет смысл, когда вы понимаете, что они неизменны. Таким образом, создав заголовок, вы не можете добавить к нему. Я не пробовал, но подозреваю
будет работать тоже.
источник
let
может исправить этоЯ был с Angular 8, и единственное, что сработало для меня, это:
источник
В руководстве ( https://angular.io/guide/http ) я прочитал: класс HttpHeaders является неизменным, поэтому каждый set () возвращает новый экземпляр и применяет изменения.
Следующий код работает для меня с angular-4:
источник
В моем устаревшем приложении Array.from из прототипа js конфликтовал с Array.from из angular, который вызывал эту проблему. Я решил это, сохранив версию Angray Array.from и переназначив ее после загрузки прототипа.
источник
Пример службы HttpClient Angular 8 с обработкой ошибок и пользовательским заголовком
Ознакомьтесь с полным примером учебника здесь
источник