本文为原创文章,转载请标明出处

目录

  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

如有不当之处,请予指正,谢谢~

Ionic3学习笔记(十三)HttpClient 实现 HTTP 请求以及踩过的一些坑的更多相关文章

  1. Android学习笔记之HttpClient实现Http请求....

    PS:最近光忙着考试了....破组成原理都看吐了....搞的什么也不想干...写篇博客爽爽吧....貌似明天就考试了...sad... 学习笔记: 1.如何实现Http请求来实现通信.... 2.解决 ...

  2. python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容

    python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI,采用Python语言编写 ...

  3. java之jvm学习笔记十三(jvm基本结构)

    java之jvm学习笔记十三(jvm基本结构) 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让概念在你的脑子里变成 ...

  4. Go语言学习笔记十三: Map集合

    Go语言学习笔记十三: Map集合 Map在每种语言中基本都有,Java中是属于集合类Map,其包括HashMap, TreeMap等.而Python语言直接就属于一种类型,写法上比Java还简单. ...

  5. Vue学习笔记十三:Vue+Bootstrap+vue-resource从接口获取数据库数据

    目录 前言 SpringBoot提供后端接口 Entity类 JPA操作接口 配置文件 数据库表自动映射,添加数据 写提供数据的接口 跨域问题 前端修改 效果图 待续 前言 Vue学习笔记九的列表案例 ...

  6. python 学习笔记十三 JQuery(进阶篇)

    jQuery 是一个 JavaScript 库. jQuery 极大地简化了 JavaScript 编程. 安装jQuery 有两个版本的 jQuery 可供下载: Production versio ...

  7. java jvm学习笔记十三(jvm基本结构)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完 ...

  8. cocos2d-x 3.1.1 学习笔记[11] http请求 + json解析

    //http须要引入的头文件和命名空间 #include <network/HttpClient.h> using namespace network; //json须要引入的头文件 #i ...

  9. SharpGL学习笔记(十三) 光源例子:环绕二次曲面球体的光源

    这是根据徐明亮<OpenGL游戏编程>书上光灯一节的一个例子改编的. 从这个例子可以学习到二次曲面的参数设置,程序中提供了两个画球的函数,一个是用三角形画出来的,一个是二次曲面构成的. 你 ...

随机推荐

  1. Mybatis 使用分页查询亿级数据 性能问题 DB使用ORACLE

    一般用到了mybatis框架分页就不用自己写了 直接用RowBounds对象就可以实现,但这个性能确实很低 今天我用到10w级得数据分页查询,到后面几页就迭代了很慢 用于记录 1.10万级数据如下 [ ...

  2. java客房管理小项目,适合java小白练手的项目!

    java客房管理小项目 这个客房管理小项目,适合java初学者练手.功能虽然不多,但是内容很齐全! 喜欢这样文章的可以关注我,我会持续更新,你们的关注是我更新的动力!需要更多java学习资料的也可以私 ...

  3. Linux笔记(二)

    Linux笔记(二) 一.软件包管理 1.rpm命令使用:Linux安装软件包的三种方法 rpm工具类似于Windows的exe文件,可以直接进行安装,而且安装路径和文件名一般都是固定好的. 在Cen ...

  4. [前端] VUE基础 (5) (过滤器、生命周期、钩子函数)

    一.过滤器 过滤器分为局部过滤器和全局过滤器. 1.局部过滤器 <body> <div id="app"> </div> <script ...

  5. Microsoft.Office.Inter.Excel.dll在調用時可能會出現如下錯誤

    Microsoft.Office.Inter.Excel.dll在調用時可能會出現如下錯誤,具體解決方案如下: 1. 錯誤資訊:檢索 COM 類工廠中 CLSID 為{00024500-0000-00 ...

  6. TFRecord 的使用

    什么是 TFRecord PS:这段内容摘自 http://wiki.jikexueyuan.com/project/tensorflow-zh/how_tos/reading_data.html 一 ...

  7. screen模式下鼠标无法滚动【问题】

    忍了很久, 终于查到原因了. 回滚模式: CTRL+A (释放), [ 切换模式: CTRL+ C 参考: https://serverfault.com/questions/206303/how-t ...

  8. 设计函数f(f(n))== -n

    来源:厦门SEO 我上次面试时遇到的一个问题: 设计一个函数f ,使得: f(f(n)) == -n 其中n是一个32位有符号整数 ; 您不能使用复数算法. 如果您不能为整个数字范围设计这样的函数,请 ...

  9. 如何在linux中运行sql文件

    1.在linux中进入sql命令行 mysql -u root -p   输入密码 2.假设home下面有a.sql文件 先得use databasename,要不会报错 “No Database S ...

  10. MySQL主从及读写分离配置

    <<MySQL主从又叫做Replication.AB复制.简单讲就是A和B两台机器做主从后,在A上写数据,B也会跟着写数据,两者数据实时同步>> MySQL主从是基于binlo ...