Ionic3學習筆記(十三)HttpClient 實現 HTTP 請求以及踩過的一些坑


本文為原創文章,轉載請標明出處

目錄

  1. 貓眼API
  2. HttpClient 實現 HTTP 請求
    • 安裝 HttpClientModule 模塊
    • 創建 provider
    • 創建 page
  3. 一些坑
    • 坑1: 未在 app.module.ts 中導入 HttpClientModule
    • 坑2: Chrome 調試時 CORS 問題
    • 坑3: WKWebView 問題
  4. 更多

1. 貓眼API

當然是基於這篇古老的文章啦 ==> http://www.jianshu.com/p/9855610eb1d4
因為是2015年的文章,已經時隔2年多,很難確保API仍可使用,所以我親自進行了抓包,發現沒毛病還能用,並且還多發現了2個接口,現整理如下:

正在熱映電影列表:
http://m.maoyan.com/movie/list.json?type=hot&offset=0&limit=1
Request:

type ==> hot  類型(正在熱映)
offset  初始數據位置
limit   顯示數據最大上限值

即將上映電影列表:
http://m.maoyan.com/movie/list.json?type=coming&offset=0&limit=1
Request:

type ==> coming  類型(即將上映)
offset  初始數據位置
limit   顯示數據最大上限值

電影詳情:
http://m.maoyan.com/movie/342068.json
Request:
后面跟上電影id即可

最新短評列表1:
http://m.maoyan.com/comments.json?movieid=342068&offset=0&limit=1
Request:

movieid 電影id
offset  初始數據位置(最大為1000)
limit   顯示數據最大上限值(最大為15)

最新短評列表2:
http://m.maoyan.com/mmdb/comments/movie/342068.json?offset=0&limit=1&startTime=2017-12-01 08:00:00
Request:
后面跟上電影id

offset  初始數據位置(最大為1000)
limit   顯示數據最大上限值(最大為15)
startTime   評論初始時間

評論回復列表:
http://m.maoyan.com/mmdb/replies/comment/129764411.json?offset=0&limit=1
Request:
后面跟上評論id

offset  初始數據位置
limit   顯示數據最大上限值

本地影院列表:
http://m.maoyan.com/cinemas.json
根據ip段獲取本地影院列表

放映時刻表:
http://m.maoyan.com/showtime/wrap.json?cinemaid=1181&movieid=343905
Request:

cinemaid    影院id
movieid     電影id

選座購票詳情:
http://m.maoyan.com/show/seats?showId=70157&showDate=2017-12-09
Request:

showId      放映id
showDate    放映時間

2. HttpClient 實現 HTTP 請求

安裝 HttpClientModule 模塊

app.module.ts

...
import {HttpClientModule} from "@angular/common/http";
...

@NgModule({
  ...
  imports: [
    ...
    HttpClientModule,
    ...
  ]
  ...
})
...

創建 provider

終端運行:

ionic g provider movies

movies.ts

import {HttpClient} from '@angular/common/http';
import {Injectable} from '@angular/core';

@Injectable()
export class MoviesProvider {

  hotMovies: any[];

  constructor(public http: HttpClient) {
    this.getHotMovies();
  }

  getHotMovies() {
    let hotMoviesUrl: string = "https://m.maoyan.com/movie/list.json?type=hot&offset=0&limit=100";
    this.http.get(hotMoviesUrl).subscribe(data => {
      this.hotMovies = data["data"]["movies"];
    });
  }

}

創建 page

終端運行:

ionic g page movie

movie.html

<ion-header>

  <ion-navbar>
    <ion-title>電影</ion-title>
  </ion-navbar>

</ion-header>


<ion-content>
  <ion-list>
    <button ion-item *ngFor="let movie of moviesProvider.hotMovies">
      {{movie["nm"]}}
    </button>
  </ion-list>
</ion-content>

movie.ts

import {Component} from '@angular/core';
import {IonicPage, NavController, NavParams} from 'ionic-angular';

import {MoviesProvider} from "../../providers/movies/movies";

@IonicPage({
  priority: 'high'
})
@Component({
  selector: 'page-movie',
  templateUrl: 'movie.html',
})
export class MoviePage {

  constructor(public navCtrl: NavController, public navParams: NavParams, public moviesProvider: MoviesProvider) {

  }

  ionViewDidEnter() {
    console.log(this.moviesProvider.hotMovies);
  }

}

3. 一些坑

坑1: 未在 app.module.ts 中導入 HttpClientModule

ionic g provider movies 命令執行后並未在 app.module.ts 中自動導入 HttpClientModule

坑2: Chrome 調試時 CORS 問題

最簡單的辦法就是給 Chrome 安裝 Allow-Control-Allow-Origin 插件了,鏈接 ==> https://chrome.google.com/webstore/search/Allow-Control-Allow-Origin?hl=zh-CN 第一個就是。

坑3: WKWebView 問題

emmm... 真機調試的時候,Android 端木有問題,顯示正常,而 iOS 端啥都不顯示,不知道問題出在哪里(我懷疑是 WKWebView 的 CORS 問題,求評論!!!),我的解決辦法是,降回到 UIWebView。

首先卸載 Ionic WebView 插件

ionic cordova plugin remove cordova cordova-plugin-ionic-webview --save
ionic cordova platform rm ios
ionic cordova platform add ios
ionic cordova build ios --prod

然后 config.xml

<preference name="CordovaWebViewEngine" value="CDVUIWebViewEngine" />

4. 更多

Angular - HttpClient
Angular - API - HttpClient
Ionic - WKWebView

如有不當之處,請予指正,謝謝~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM