使用 Ionic2 提供程序访问 Api 服务
Posted
技术标签:
【中文标题】使用 Ionic2 提供程序访问 Api 服务【英文标题】:Access Api service using Ionic2 provider 【发布时间】:2017-08-04 02:42:52 【问题描述】:您能告诉我为什么我无法访问 API 服务吗?当我在浏览器或 Postman 上键入它时它工作正常。为什么它不能与 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 例外:状态为 302 的响应已找到 网址:https://www.mylink.com/admin/index.php?route=api/event ErrorHandler.handleError@error_handler.js:54 IonicErrorHandler.handleError @ ionic-error-handler.js:58 下一个 @ application_ref.js:348 schedulerFn @ async.js:93 SafeSubscriber.__tryOrUnsub @Subscriber.js:223 SafeSubscriber.next @ 订阅者.js:172订阅者._next @订阅者.js:125订阅者.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 调用@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);
);
);
赫德详细信息
邮递员标题:
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
【问题讨论】:
您是否也在邮递员中获得相同的标题?那么我不确定。 请查看邮递员标题。在邮递员上它显示 json 数据,即使它有 302 错误。知道吗? @suraj 我认为它正在重定向并给出最终响应的标题。还没有见过这样的移动应用程序......最坏的情况是你可以尝试使用 inAppBrowser 吗?这是一个奇怪的想法.. 我可以在这里做什么? @suraj 【参考方案1】:响应 302 是重定向到不同的 URL。有关响应本身的更多说明,请查看this question 和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);
);
【讨论】:
这里给出了这个错误res.headers.location
.compile time error: Property 'location' does not exist on type 'Headers'
.do you know why?
位置应该是标题中的一个属性..让我编辑答案
还是同样的错误。请参阅更新部分的最终代码。
可以添加console.log(JSON.stringify(res.headers,null,2))
的日志吗?
应该在那里..developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Location以上是关于使用 Ionic2 提供程序访问 Api 服务的主要内容,如果未能解决你的问题,请参考以下文章
没有苹果电脑打包iOS平台的 Ionic 2程序——《Ionic 2 实例开发》更新内容