POST 使用 Ionic 2 调用
POST calls with Ionic 2
我一直在努力使用 Ionic 2 实现对 ASP.NET API 的 POST 调用。我在有用指南的帮助下管理了 GET,但是在我看到 YouTube 视频之前,我真的找不到与 POST 类似的内容。在该视频的帮助下,我的提供商中有此方法:
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 在创建提供程序时提供的方法。它们类似于此代码,除了声明变量和附加 headers 的部分,当然还有 http.get 而不是 post 。
这是我用来从页面控制器调用提供者函数的函数:
setuplogin() {
this.backend.backendlogin()
.then(data => {
this.data = data;
});
console.log(this.data);
}
现在进入正题。如果我了解所有内容,那么 backendLogin() 应该在出现故障时显示错误警报,它确实如此。警报显示“[object Object]”。控制台中唯一的东西是一个空日志,大概来自 setupLogin() 因为数据是空的。 api 应该有一个电子邮件地址和一个密码,return 一个 uID。谁能指出我正确的方向?
如果有错误我会拒绝承诺:
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
方法:
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
});
}
我一直在努力使用 Ionic 2 实现对 ASP.NET API 的 POST 调用。我在有用指南的帮助下管理了 GET,但是在我看到 YouTube 视频之前,我真的找不到与 POST 类似的内容。在该视频的帮助下,我的提供商中有此方法:
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 在创建提供程序时提供的方法。它们类似于此代码,除了声明变量和附加 headers 的部分,当然还有 http.get 而不是 post 。
这是我用来从页面控制器调用提供者函数的函数:
setuplogin() {
this.backend.backendlogin()
.then(data => {
this.data = data;
});
console.log(this.data);
}
现在进入正题。如果我了解所有内容,那么 backendLogin() 应该在出现故障时显示错误警报,它确实如此。警报显示“[object Object]”。控制台中唯一的东西是一个空日志,大概来自 setupLogin() 因为数据是空的。 api 应该有一个电子邮件地址和一个密码,return 一个 uID。谁能指出我正确的方向?
如果有错误我会拒绝承诺:
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
方法:
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
});
}