Hier ist mein Code:
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.');
}
}
);
}
und hier das Netzwerk-Debug:
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
und Daten werden in 'Request Payload' gespeichert, aber auf meinem Server wurden die POST-Werte nicht empfangen:
print_r($_POST);
Array
(
)
Ich glaube, der Fehler kommt von dem Header, der während des POST nicht gesetzt wurde. Was habe ich falsch gemacht?
angular
http-headers
angular-httpclient
Frennetix
quelle
quelle
Antworten:
Die Instanzen der neuen
HttpHeader
Klasse sind unveränderliche Objekte. Das Aufrufen von Klassenmethoden gibt als Ergebnis eine neue Instanz zurück. Grundsätzlich müssen Sie also Folgendes tun:oder
Update: Hinzufügen mehrerer Header
oder
Update: Objektzuordnung für HttpClient-Header und -Parameter akzeptieren
Seit 5.0.0-beta.6 ist es nun möglich, die Erstellung eines
HttpHeaders
Objekts zu überspringen und eine Objektzuordnung direkt als Argument zu übergeben. Jetzt ist es also möglich, Folgendes zu tun:quelle
set
Methodenname also etwas irreführend.HttpHeaders().set(..).set(..)
aber jetzt werden die Header wieder nicht in die HTTP-Headerfelder geschrieben?!Um mehrere Parameter oder Header hinzuzufügen, können Sie Folgendes tun:
quelle
lazyUpdate
Eigenschaft angezeigt, aber schließlich stürzt sie mit derCreateListFromArrayLike
Ausnahme ab, wenn die Anforderung durch Abonnieren wirksam wird.Stellen Sie http-Header wie unten in Ihrer http-Anfrage ein
quelle
Ich hatte lange damit zu kämpfen. Ich benutze Angular 6 und habe das gefunden
funktioniert nicht. Aber was hat funktioniert?
tat, was Sinn macht, wenn Sie erkennen, dass sie unveränderlich sind. Nachdem Sie einen Header erstellt haben, können Sie ihn nicht hinzufügen. Ich habe es nicht versucht, aber ich vermute
würde auch funktionieren.
quelle
let
Problem beheben könnteIch war bei Angular 8 und das einzige, was für mich funktionierte, war Folgendes:
quelle
Im Handbuch ( https://angular.io/guide/http ) habe ich gelesen: Die HttpHeaders-Klasse ist unveränderlich, daher gibt jedes set () eine neue Instanz zurück und wendet die Änderungen an.
Der folgende Code funktioniert für mich mit Angular-4:
quelle
In meiner Legacy-App stand Array.from des Prototyps js in Konflikt mit Array.from von Angular, das dieses Problem verursachte. Ich habe es behoben, indem ich die Array.from-Version von Angular gespeichert und nach dem Laden des Prototyps neu zugewiesen habe.
quelle
Beispiel für einen Angular 8 HttpClient- Dienst mit Fehlerbehandlung und benutzerdefiniertem Header
Das vollständige Beispiel-Tutorial finden Sie hier
quelle