Oto mój kod:
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.');
}
}
);
}
a tutaj debug sieciowy:
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
a dane są przechowywane w „Request Payload”, ale na moim serwerze nie otrzymałem wartości POST:
print_r($_POST);
Array
(
)
Uważam, że błąd pochodzi z nagłówka nie ustawionego podczas POST, co zrobiłem źle?
angular
http-headers
angular-httpclient
Frennetix
źródło
źródło
Odpowiedzi:
Instancje nowej
HttpHeader
klasy są niezmiennymi obiektami. Wywołanie metod klasy zwróci jako wynik nową instancję. Zasadniczo musisz wykonać następujące czynności:lub
Aktualizacja: dodawanie wielu nagłówków
lub
Aktualizacja: zaakceptuj mapę obiektów dla nagłówków i parametrów HttpClient
Od wersji 5.0.0-beta.6 jest teraz możliwe pominięcie tworzenia
HttpHeaders
obiektu i bezpośrednie przekazanie mapy obiektów jako argumentu. Więc teraz można wykonać następujące czynności:źródło
set
nazwa metody jest nieco myląca.HttpHeaders().set(..).set(..)
ale teraz znowu nagłówki nie są zapisywane w polach nagłówka HTTP ?!Aby dodać wielokrotności parametrów lub nagłówków, możesz wykonać następujące czynności:
źródło
lazyUpdate
właściwości, ale ostatecznie ulegnie awarii, zCreateListFromArrayLike
wyjątkiem sytuacji, gdy żądanie będzie skuteczne, subskrybując je.ustaw nagłówki http jak poniżej w swoim żądaniu http
źródło
Walczyłem z tym przez długi czas. Używam Angular 6 i znalazłem to
nie działał. Ale to, co zadziałało, było
zrobił, co ma sens, gdy zdajesz sobie sprawę, że są niezmienne. Więc po utworzeniu nagłówka nie możesz go dodać. Nie próbowałem tego, ale podejrzewam
zadziała też.
źródło
let
może to naprawićByłem z Angular 8 i jedyną rzeczą, która działała dla mnie, było to:
źródło
W instrukcji ( https://angular.io/guide/http ) przeczytałem: Klasa HttpHeaders jest niezmienna, więc każda set () zwraca nową instancję i wprowadza zmiany.
Poniższy kod działa dla mnie z angular-4:
źródło
W mojej starszej aplikacji Array.from of prototype js był w konflikcie z Array.from firmy angular, który był przyczyną tego problemu. Rozwiązałem to, zapisując Array.z wersji angulara i przypisując go ponownie po załadowaniu prototypu.
źródło
Przykład usługi HttpClient Angular 8 z obsługą błędów i niestandardowym nagłówkiem
Sprawdź pełny przykładowy samouczek tutaj
źródło