使用 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 实例开发》更新内容

Ionic2 离子输入在 iOS 模拟器上不起作用

Ionic2,Angular2:如何在使用 http get 进行 REST API 服务调用时避免 CORS 问题?

Ionic 2 云服务

Ionic2 客户端中的环回离线同步

Ionic2 错误:“没有存储提供程序”