我一直在努力实现对Ionic 2的ASP.NET API的POST调用。我在一个有用的指南的帮助下管理了一个GET,但我真的找不到任何类似的POST,直到我看到了一段YouTube视频。在该视频的帮助下,我在我的提供商中使用了这种方法:
backendlogin() {
if (this.data) {
return Promise.resolve(this.data);
}
return new Promise(resolve => {
var json = JSON.stringify({ email: 'a@hotmail.com', password: 'root' });
var params = 'json=' + json;
var headers = new Headers();
headers.append('Content-Type', 'application/json');
this.http.post('http://insertipadresshere/api/login',
params, {
headers: headers
})
.map(res => res.json())
.subscribe(data => {
this.data = data;
resolve(this.data);
},
error => alert(error),
() => console.log("Finished")
);
});
}
我的GET方法基本上是Ionic在创建提供程序时提供的。它们与此代码类似,除了声明变量并附加标题的部分,以及http.get而不是post。
这是我用来从页面控制器调用提供程序功能的函数:
setuplogin() {
this.backend.backendlogin()
.then(data => {
this.data = data;
});
console.log(this.data);
}
现在问题。如果我理解了所有内容,那么backendLogin()应该显示一个警告,如果出现故障就会出现错误。警报显示“[object Object]”。控制台中唯一的东西是空日志,可能来自setupLogin()因为数据是空的。 api应该使用电子邮件地址和密码并返回uID。有人能指出我正确的方向吗?
答案 0 :(得分:3)
如果出现错误,我会拒绝承诺:
return new Promise((resolve,reject) => {
var json = JSON.stringify({ email: 'a@hotmail.com', password: 'root'});
var params = 'json=' + json;
var headers = new Headers();
headers.append('Content-Type', 'application/json');
this.http.post('http://insertipadresshere/api/login',
params, {
headers: headers
})
.map(res => res.json())
.subscribe(data => {
this.data = data;
resolve(this.data);
},
error => reject(error),
() => console.log("Finished")
);
});
那就是说,我认为没有必要创造一个原始承诺。您可以使用toPromise
observables方法:
var json = JSON.stringify({ email: 'a@hotmail.com', password: 'root'});
var params = 'json=' + json;
var headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.post('http://insertipadresshere/api/login',
params, {
headers: headers
})
.map(res => res.json())
.toPromise();
);
获取错误
setuplogin() {
this.backend.backendlogin()
.then(data => {
this.data = data;
console.log(this.data);
}, error => {
// do something
});
}
要完成,您可以直接使用observable而不是返回一个promise:
var json = JSON.stringify({ email: 'a@hotmail.com', password: 'root'});
var params = 'json=' + json;
var headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.post('http://insertipadresshere/api/login',
params, {
headers: headers
})
.map(res => res.json());
);
并使用setupLogin
方法订阅:
setuplogin() {
this.backend.backendlogin()
.subscribe(data => {
this.data = data;
console.log(this.data);
},
setuplogin() {
this.backend.backendlogin()
.subscribe(data => {
this.data = data;
console.log(this.data);
}, error => {
// do something with error
});
}