我有一个发出POST请求的简单方法
postData(){
var headers = new Headers();
headers.append('Content-Type', 'application/json');
var json = JSON.stringify({email: 'Admin', password: 'Admin'});
return this._http.post('http://localhost:8080/addressbook_rest/api/v1/contacts/login', json ,
{headers: headers});
}
然后从另一个组件调用上面的方法
onLogin() {
this._service.postData().map(res => res.json()).subscribe(
data => { this.loggedin = data },
err => { console.log(err); }
);
console.log(this.loggedin);
}
问题是在第一次调用时,变量this.loggedin是未定义的,但之后我得到了我想要的东西(this.loggedin = true)。我不知道为什么它只能从第二次获得它。
答案 0 :(得分:2)
实际上,这是因为请求是异步处理的。这意味着console.log(this.loggedIn);
将首次返回undefined,因为它在subscribe回调之外。它在收到请求响应之前执行。
你应该使用类似的东西:
onLogin() {
this._service.postData().map(res => res.json()).subscribe(
data => {
this.loggedin = data;
console.log(this.loggedin); // <-------
},
err => { console.log(err); }
);
}
答案 1 :(得分:1)
这是因为post请求是异步的。你应该检查你的this.loggedin
内部订阅功能或内部地图功能。 this.loggedin
在console
上打印时没有任何内容存储在成功的ajax调用后会更新。{1}}
查看此服务here希望它能帮助您解决问题。的 dragon.service.ts 强>
要在POST后使用.then()
进行检查,这是成功承诺的回调。它会在你的ajax调用返回时运行。你应该在那里使用console.log()。