前端新手想請教表單資料透過httpclient以get/post的方式傳送到後端接收的問題。
目前碰到的狀況如下:
翻了官方範例和文件,以formgroup.value的方式將整個表單欄位值作傳送應該是沒有問題的。
但檢視了後端(Perl script)回傳的資料發現與預期資料不太一致,問題看起來像是無法辨識欄位導致。
後來我宣告了一個FormData變數,再將欄位值一個個append上去才成功。
想請問的是,是我對httpclient傳送資料的方式有什麼錯誤認知嗎?有什麼方式可以避免透過一個個append資料再作傳送?
我用console.log去檢視傳送的資料格式是json,用JSON.stringify去調整,結果也一樣。目前只有FormData可以讓我收到正確的回傳資料。
程式碼大致如下
Html
<form [formGroup]="loginForm" (ngSubmit)="login(loginForm.value)">
<mat-form-field appearance="legacy">
<mat-label>ID</mat-label>
<input matInput type="text" formControlName="username">
</mat-form-field>
<mat-form-field appearance="legacy">
<mat-label>Password</mat-label>
<input matInput type="password" formControlName="password">
</mat-form-field>
<button mat-raised-button color="primary" type="submit">Login</button>
</form>
Component
export class LoginComponent implements OnInit, OnDestroy {
private loginForm = new FormGroup({
username: new FormControl(’’),
password: new FormControl(’’),
});
…
login(formValue) {
this.loginService.login(formValue).subscribe(data => {
console.log(data);
},
error => {
console.log(error);
});
}
}
Service
export class LoginService {
constructor(private http: HttpClient) { }
login(formValue) {
return this.http.post(‘api/logins’, formValue, {responseType: ‘text’}}).pipe(
map(response => {
// parse xml
console.log(response);
}),
catchError(error => {
throw error;
}));
}
}