离子 2 http.get() 问题
Ionic 2 http.get() issue
我尝试用这两种方法进行 http.get()
调用。
第一个:
getResults(){
return this.http.get('http://localhost/api.php')
.toPromise()
.then( data => data.json() );
}
显示错误:
3 122412 error EXCEPTION: Uncaught (in promise): Response with status:0 for URL: null
4 122413 error ORIGINAL STACKTRACE:
5 122413 error Error: Uncaught (in promise): Response with status: 0 for URL: null
..........
第二个:
getResults(){
return new Promise((resolve, reject) => {
this.http.get('http://localhost/api.php')
.map(res => res.json())
.subscribe(data => {
resolve(data);
}, (err) => {
reject(err);
});
});
}
显示错误:
2 925052 error EXCEPTION: Uncaught (in promise): Response with status:0 for URL: null
3 925052 error ORIGINAL STACKTRACE:
4 925053 error Error: Uncaught (in promise): Response with status: 0 for URL: null
.......
我应该使用哪种方法,可能是什么问题?
Response with status:0 for URL: null
这似乎与 CORS 问题有关...请检查您的后端代码是否启用了 CORS。
Which way should i use?
http.get()
return 是一个 Observable,所以使用它的一种方法是
getResults(){
this.http.get('http://localhost/api.php')
.map(res => res.json());
}
然后当你调用那个方法时,你需要这样做:
this.yourService.getResults().subscribe((data) => { console.log(data); });
如果你需要return一个承诺,那么你可以这样做:
getResults(){
this.http.get('http://localhost/api.php')
.map(res => res.json())
.toPromise();
}
然后像这样使用它
this.yourService.getResults().then((data) => { console.log(data); });
看起来这是一个 CORS 问题。通常您必须将所有允许访问您的 API 的域列入白名单。但是因为您正在编写一个 Ionic 应用程序,一旦您构建了您的应用程序并 运行 它在您的设备上,这就不再重要了。这就是为什么我建议安装允许您禁用 CORS 的浏览器插件。
你的两个代码片段都做同样的事情。如果您不想使用可观察对象,我可能会选择第一个选项:
getResults() {
return this.http.get('http://localhost/api.php')
.toPromise();
}
然后:
this.service.getResults().then(data => {
// Do something with data
});
如果您在浏览器中进行测试并遇到 CORS 问题,ionic 有解决方案
您应该在 ionic.config 中放置类似的内容,当 运行 ionic serve 时,这将为您代理 API 而无需 CORS。
{
// ...
"proxies": [{
"path": "/api",
"proxyUrl": "http://xxxxxxxxx"
}]
}
我尝试用这两种方法进行 http.get()
调用。
第一个:
getResults(){
return this.http.get('http://localhost/api.php')
.toPromise()
.then( data => data.json() );
}
显示错误:
3 122412 error EXCEPTION: Uncaught (in promise): Response with status:0 for URL: null
4 122413 error ORIGINAL STACKTRACE:
5 122413 error Error: Uncaught (in promise): Response with status: 0 for URL: null
..........
第二个:
getResults(){
return new Promise((resolve, reject) => {
this.http.get('http://localhost/api.php')
.map(res => res.json())
.subscribe(data => {
resolve(data);
}, (err) => {
reject(err);
});
});
}
显示错误:
2 925052 error EXCEPTION: Uncaught (in promise): Response with status:0 for URL: null
3 925052 error ORIGINAL STACKTRACE:
4 925053 error Error: Uncaught (in promise): Response with status: 0 for URL: null
.......
我应该使用哪种方法,可能是什么问题?
Response with status:0 for URL: null
这似乎与 CORS 问题有关...请检查您的后端代码是否启用了 CORS。
Which way should i use?
http.get()
return 是一个 Observable,所以使用它的一种方法是
getResults(){
this.http.get('http://localhost/api.php')
.map(res => res.json());
}
然后当你调用那个方法时,你需要这样做:
this.yourService.getResults().subscribe((data) => { console.log(data); });
如果你需要return一个承诺,那么你可以这样做:
getResults(){
this.http.get('http://localhost/api.php')
.map(res => res.json())
.toPromise();
}
然后像这样使用它
this.yourService.getResults().then((data) => { console.log(data); });
看起来这是一个 CORS 问题。通常您必须将所有允许访问您的 API 的域列入白名单。但是因为您正在编写一个 Ionic 应用程序,一旦您构建了您的应用程序并 运行 它在您的设备上,这就不再重要了。这就是为什么我建议安装允许您禁用 CORS 的浏览器插件。
你的两个代码片段都做同样的事情。如果您不想使用可观察对象,我可能会选择第一个选项:
getResults() {
return this.http.get('http://localhost/api.php')
.toPromise();
}
然后:
this.service.getResults().then(data => {
// Do something with data
});
如果您在浏览器中进行测试并遇到 CORS 问题,ionic 有解决方案 您应该在 ionic.config 中放置类似的内容,当 运行 ionic serve 时,这将为您代理 API 而无需 CORS。
{
// ...
"proxies": [{
"path": "/api",
"proxyUrl": "http://xxxxxxxxx"
}]
}