[英]Unable to get HTTP response from Angular 4
我正在嘗試為Angular應用創建登錄功能。 我正在使用Angular 4(似乎與Angularjs沒什么不同)
我正在嘗試找出如何使用HTTP的方法,並且被卡住了。
我在網頁上收到此錯誤:
login.component.ts (29,3): Type 'Promise<User>' is not assignable to type 'User'. Property 'id' is missing in type 'Promise<User>'.
並在控制台上:
login.component.ts (30,25): Property 'json' does not exist on type 'User'.
對於我來說,我似乎無法從服務器發送實際的響應(請參閱下文)。
我已經關注了有關angular.io( https://angular.io/tutorial/toh-pt6 )的HTTP教程,並且嘗試了.subscribe,.map等多種變體。
這是訪問后端的組件:
export class loginComponent {
SERVICE_URL = "http://localhost:80/play/classes/index.php?fn=userLogin";
model = new Login("", "");
user: User;
constructor(private http: Http) {}
onSubmit(){
console.log("submission complete!");
console.log(this.model.username);
console.log(this.model.pass);
let params: URLSearchParams = new URLSearchParams();
params.set('username', this.model.username);
params.set('password', this.model.pass);
this.user = this.doLogin(params);
console.log(this.user.json);
}
doLogin(params: URLSearchParams): Promise<User>{
return this.http.get(this.SERVICE_URL, new RequestOptions({"search": params}) )
.toPromise()
.then(response => response.json().data as User)
.catch(this.handleError);
}
get diagnostic() { return JSON.stringify(this.model); }
private handleError(error: any): Promise<any> {
console.error('An error occurred', error); // for demo purposes only
return Promise.reject(error.message || error);
}
}
這是我從服務器獲得的響應,但實際上無法在應用程序中使用:
{"id":"3","username":"jamiemac262","password":"123456","dob":"1993-03-24","email":"jamiemac262@xxxx.co.uk","steamID":null,"age":24}
您沒有解決訪問數據的承諾
this.doLogin(params).then((data=>console.log(data));
使用then
運算符獲取數據
更新您不使用json映射,並將可觀察和承諾分開
doLogin(params: URLSearchParams): Promise<User>{
let promise = this.http.get(this.SERVICE_URL, new RequestOptions({"search": params}) )
.map(response => <User>response.json())
.catch(this.handleError);
return promise.toPromise();
}
this.doLogin(params).then((data)=>console.log(data),()=>{});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.