使用 Ionic2 提供程序访问 Api 服务
Access Api service using Ionic2 provider
你能告诉我为什么我无法访问 API 服务吗?当我在浏览器或 Postman.Why 上输入它时它工作正常,它不能与 ionic2 提供程序一起使用吗?
提供商:
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';
@Injectable()
export class EventData {
data: any;
constructor(public http: Http) {
}
getEventList(): any {
if (this.data) {
return Promise.resolve(this.data);
}
return new Promise(resolve => {
this.http.get('https://mylink.com/admin/index.php?route=api/event')
.map(res => res.json())
.subscribe(data => {
this.data = data;
resolve(this.data);
});
});
}
}
异常:
error_handler.js:54 EXCEPTION: Response with status: 302 Found for
URL: https://www.mylink.com/admin/index.php?route=api/event
ErrorHandler.handleError @ error_handler.js:54
IonicErrorHandler.handleError @ ionic-error-handler.js:58 next @
application_ref.js:348 schedulerFn @ async.js:93
SafeSubscriber.__tryOrUnsub @ Subscriber.js:223 SafeSubscriber.next @
Subscriber.js:172 Subscriber._next @ Subscriber.js:125 Subscriber.next
@ Subscriber.js:89 Subject.next @ Subject.js:55 EventEmitter.emit @
async.js:79 NgZone.triggerError @ ng_zone.js:333 onHandleError @
ng_zone.js:294 t.handleError @ polyfills.js:3 e.runTask @
polyfills.js:3 invoke @ polyfills.js:3
更新:
getEventList(): any {
return new Promise(resolve => {
this.http.get('https://mylink.com/admin/index.php?route=api/event')
.map(res => {
console.log(res.headers.get('Location'));
console.log(JSON.stringify(res.headers,null,2));
return res.json();
})
.subscribe(data => {
this.data = data;
resolve(this.data);
});
});
}
Heder 详细信息
邮递员Headers:
Cache-Control →no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection →Keep-Alive
Content-Length →2811
Content-Type →application/json
Date →Tue, 14 Mar 2017 02:31:50 GMT
Expires →Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive →timeout=5, max=100
Pragma →no-cache
Server →Apache
X-Powered-By →PHP/5.6.26
响应 302 是重定向到另一个 URL。有关响应本身的更多解释,请查看 this question and also this。
对于浏览器,它们直接处理重定向。
对于您的响应,如果无法在服务器端进行更改,您可以在 response.headers.location
.
中获取重定向位置
return new Promise(resolve => {
this.http.get('https://mylink.com/admin/index.php?route=api/event')
.map(res => {console.log(res.headers.get('Location'));return res.json();})
.subscribe(data => {
this.data = data;
resolve(this.data);
});
你能告诉我为什么我无法访问 API 服务吗?当我在浏览器或 Postman.Why 上输入它时它工作正常,它不能与 ionic2 提供程序一起使用吗?
提供商:
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';
@Injectable()
export class EventData {
data: any;
constructor(public http: Http) {
}
getEventList(): any {
if (this.data) {
return Promise.resolve(this.data);
}
return new Promise(resolve => {
this.http.get('https://mylink.com/admin/index.php?route=api/event')
.map(res => res.json())
.subscribe(data => {
this.data = data;
resolve(this.data);
});
});
}
}
异常:
error_handler.js:54 EXCEPTION: Response with status: 302 Found for URL: https://www.mylink.com/admin/index.php?route=api/event ErrorHandler.handleError @ error_handler.js:54 IonicErrorHandler.handleError @ ionic-error-handler.js:58 next @ application_ref.js:348 schedulerFn @ async.js:93 SafeSubscriber.__tryOrUnsub @ Subscriber.js:223 SafeSubscriber.next @ Subscriber.js:172 Subscriber._next @ Subscriber.js:125 Subscriber.next @ Subscriber.js:89 Subject.next @ Subject.js:55 EventEmitter.emit @ async.js:79 NgZone.triggerError @ ng_zone.js:333 onHandleError @ ng_zone.js:294 t.handleError @ polyfills.js:3 e.runTask @ polyfills.js:3 invoke @ polyfills.js:3
更新:
getEventList(): any {
return new Promise(resolve => {
this.http.get('https://mylink.com/admin/index.php?route=api/event')
.map(res => {
console.log(res.headers.get('Location'));
console.log(JSON.stringify(res.headers,null,2));
return res.json();
})
.subscribe(data => {
this.data = data;
resolve(this.data);
});
});
}
Heder 详细信息
邮递员Headers:
Cache-Control →no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection →Keep-Alive
Content-Length →2811
Content-Type →application/json
Date →Tue, 14 Mar 2017 02:31:50 GMT
Expires →Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive →timeout=5, max=100
Pragma →no-cache
Server →Apache
X-Powered-By →PHP/5.6.26
响应 302 是重定向到另一个 URL。有关响应本身的更多解释,请查看 this question and also this。
对于浏览器,它们直接处理重定向。
对于您的响应,如果无法在服务器端进行更改,您可以在 response.headers.location
.
return new Promise(resolve => {
this.http.get('https://mylink.com/admin/index.php?route=api/event')
.map(res => {console.log(res.headers.get('Location'));return res.json();})
.subscribe(data => {
this.data = data;
resolve(this.data);
});