简介

vue-resource是Vue.js的一款插件,它可以通过XMLHttpRequest或JSONP发起请求并处理响应。也就是说,$.ajax能做的事情,vue-resource插件一样也能做到,而且vue-resource的API更为简洁。

本文是基于之前的文章(Vue学习笔记进阶篇——vue-cli安装及介绍)vue-cli脚手架工具的。

基本语法

引入vue-resource后,可以基于全局的Vue对象使用http,也可以基于某个Vue实例使用http。

// 基于全局Vue对象使用http

Vue.http.get('/someUrl', [options]).then(successCallback, errorCallback);

Vue.http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);

// 在一个Vue实例内使用$http

this.$http.get('/someUrl', [options]).then(successCallback, errorCallback);

this.$http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);

以下是一个简单的get使用示例:

// GET /someUrl

this.$http.get('/someUrl').then(response => {

// success callback

}, response => {

// error callback

});

http方法列表

get(url, [options])

head(url, [options])

delete(url, [options])

jsonp(url, [options])

post(url, [body], [options])

put(url, [body], [options])

patch(url, [body], [options])

options

Parameter

Type

Description

url

string

URL to which the request is sent

body

Object, FormData, string

Data to be sent as the request body

headers

Object

Headers object to be sent as HTTP request headers

params

Object

Parameters object to be sent as URL parameters

method

string

HTTP method (e.g. GET, POST, ...)

responseType

string

Type of the response body (e.g. text, blob, json, ...)

timeout

number

Request timeout in milliseconds (0 means no timeout)

before

function(request)

Callback function to modify the request options before it is sent

progress

function(event)

Callback function to handle the ProgressEvent of uploads

credentials

boolean

Indicates whether or not cross-site Access-Control requests should be made using credentials

emulateHTTP

boolean

Send PUT, PATCH and DELETE requests with a HTTP POST and set the X-HTTP-Method-Override header

emulateJSON

boolean

Send request body as application/x-www-form-urlencoded content type

Response

返回对象的参数以及对象的方法如下:

Property

Type

Description

url

string

Response URL origin

body

Object, Blob, string

Response body

headers

Header

Response Headers object

ok

boolean

HTTP status code between 200 and 299

status

number

HTTP status code of the response

statusText

string

HTTP status text of the response

Method

Type

Description

text()

Promise

Resolves the body as string

json()

Promise

Resolves the body as parsed JSON object

blob()

Promise

Resolves the body as Blob object

Example

简单的post提交

{

// POST /someUrl

this.$http.post('/someUrl', {foo: 'bar'}).then(response => {

// get status

response.status;

// get status text

response.statusText;

// get 'Expires' header

response.headers.get('Expires');

// get body data

this.someData = response.body;

}, response => {

// error callback

});

}

带查询参数和自定义请求头的GET请求

{

// GET /someUrl?foo=bar

this.$http.get('/someUrl', {params: {foo: 'bar'}, headers: {'X-Custom': '...'}}).then(response => {

// success callback

}, response => {

// error callback

});

}

获取图片并使用blob()方法从响应中提取图片的主体内容。

// GET /image.jpg

this.$http.get('/image.jpg', {responseType: 'blob'}).then(response => {

// resolve to Blob

return response.blob();

}).then(blob => {

// use image Blob

});

安装

在终端通过cd命令进入到之前文章中创建的my-demo1项目目录里,然后使用以下命令进行安装:

npm install vue-resource --save

--save参数的作用是在我们的包配置文件package.json文件中添加对应的配置。安装成功后, 可以查看package.json文件,你会发现多了"vue-resource": "^1.3.4"的配置。具体如下:

"dependencies": {

"vue": "^2.3.3",

"vue-resource": "^1.3.4",

"vue-router": "^2.7.0"

},

使用

注册

通过以上步骤,我们已经安装好了vue-resource,但是在vue-cli中我们如何使用呢?

首先,我们需要在main.js文件中导入并注册vue-resource:

import VueResource from 'vue-resource'

Vue.use(VueResource)

项目中调用

在此之前,我用php的laravel框架开发了一些简单的api接口,用以接下来我们的测试。这里我先介绍下,我的api接口的功能:

url: http://api.chairis.cn/api?app_id=123456&method=demo.run

params:

app_id: 应用id, 我这边提供了一个测试的id123456

method: 方法名称,我这边提供的测试方法为demo.run

功能:这个方法的功能就比较简单了,就是把上送的参数再返回来而已。

我们可以在浏览器中输入上述url测试下是否能成功:

从图中可以看出,返回的对象里,data就是我们的上送的内容,当然你也可以加一些其他的参数,也同样的会返回,只是app_id, method必须是正确的,其他的随便。如下:

既然我们的接口是没有问题的,那么,我们就试试我们的vue-resource的强大功能吧。这里我们就在之前的DemoHome组件里实现我们的测试吧。

get

修改DemoHome组件的javascript标签的代码如下:

export default({

name:'home',

mounted:function () {

this.$http.get('http://api.chairis.cn/api',{

params:{

app_id:'123456',

method:'demo.run',

name:'chain'

}

}).then(response => {

console.log('请求成功')

},

response => {

console.log('请求失败')

});

}

})

保存后,刷新页面,可以从控制台看到输出了请求成功字样。然后我们再看下请求和返回的数据:

请求:

响应:

post

修改DemoHome组件的javascript标签的代码如下:

export default({

name:'home',

mounted:function () {

this.$http.post('http://api.chairis.cn/api?app_id=123456&method=demo.run',{

body: {

name: {

first_name: 'chain',

last_name: 'zhang'

},

email: 'zzceng@126.com'

}

},{emulateJSON: true}).then(response => {

console.log('请求成功')

},

response => {

console.log('请求失败')

});

}

})

保存后,刷新页面,可以从控制台看到输出了请求成功字样。然后我们再看下请求和返回的数据:

请求:

响应:

在这里我们看到了陌生的东西emulateJSON, 为什么要加这个参数呢,想知道为什么,那么就把他去掉试试,去掉了,你会发现请求失败了,报以下错误:

这是个跨域请求,没有权限的问题,但是已加上这个熟悉就可以了。那我们就来看看这到底是个什么鬼。

emulateJSON

emulateJSON(布尔值)

默认值为:false,当值为true并且data为对象时,设置请求头Content-Type的值为application/x-www-form-urlencoded。

如果服务器无法处理编码为application/json的请求,可以启用emulateJSON选项。启用之后,请求会以application/x-www-form-urlencoded为MIME type,就像普通的HTML表单一样。

而this.$http.post的data默认不是以form data的形式,而是request payload, 所以需要这样设置。

当然,如果你觉得每次的请求都要加这个熟悉很麻烦的话,你也可以使用全局配置,在main.js中注册了vue-resource之后,添加以下代码即可:

Vue.http.options.emulateJSON = true;

另外还有个类似的属性emulateHTTP.

emulateHTTP

emulateHTTP(布尔值)

默认值为:false,当值为true是,用HTTP的POST方式PUT,PATCH,DELETE等请求,并设置请求头字段HTTP_Method_Override为原始请求方法。

如果Web服务器无法处理PUT, PATCH和DELETE这种REST风格的请求,你可以启用enulateHTTP现象。启用该选项后,请求会以普通的POST方法发出,并且HTTP头信息的X-HTTP-Method-Override属性会设置为实际的HTTP方法。

如果服务器无法处理PUT,PATCH和DELETE的请求。可以启用enulateHTTP。

启用之后,请求会以普通的POST方法发出,并且HTTP头信息的X-HTTP-Method-Override属性会设置为实例的HTTP方法

Vue.http.options.emulateHTTP = true;

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

vue-resource post php,Vue学习笔记进阶篇——vue-resource安装及使用相关推荐

  1. Vue学习笔记进阶篇——Render函数

    本文为转载,原文:Vue学习笔记进阶篇--Render函数 基础 Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编 ...

  2. Vue学习笔记进阶篇——多元素及多组件过渡

    本文为转载,原文:Vue学习笔记进阶篇--多元素及多组件过渡 多元素的过渡 对于原生标签可以使用 v-if/v-else.但是有一点需要注意: 当有相同标签名的元素切换时,需要通过 key 特性设置唯 ...

  3. PHP学习笔记 - 进阶篇(7)

    PHP学习笔记 - 进阶篇(7) 文件操作 读取文件内容 PHP具有丰富的文件操作函数,最简单的读取文件的函数为file_get_contents,可以将整个文件全部读取到一个字符串中. $conte ...

  4. DDD学习笔记 - 进阶篇(Ⅱ)

    09 | 中台:数字转型后到底应该共享什么? 课程链接:https://time.geekbang.org/column/article/159580 中台是数字化转型的一个热门话题.继阿里提出中台概 ...

  5. 极客HTTP协议学习笔记破冰篇(1-7)

    极客HTTP协议学习笔记破冰篇(1-7) 前言 各篇章笔记链接 一.学习笔记 1.HTTP的前世今生 2.HTTP是什么 3.与HTTP相关的各种概念(上) 4.与HTTP相关的各种概念(下) 5.常 ...

  6. vue项目打包与配置-学习笔记

    文章目录 vue项目打包与配置-学习笔记 前端打包 打包的代码如何运行 打包指定不同的环境变量(开发,测试) 打包手动配置文件 打包压缩,大文件处理 gzip进一步压缩 打包app 打包部署模式 vu ...

  7. Vue学习笔记入门篇——数据及DOM

    本文为转载,原文:Vue学习笔记入门篇--数据及DOM 数据 data 类型 Object | Function 详细 Vue 实例的数据对象.Vue 将会递归将 data 的属性转换为 getter ...

  8. 「Vue 学习笔记 1」Vue 项目快速搭建,初始项目各个文件夹作用介绍和启动代码执行流程分析

    「Vue 学习笔记 1」Vue 项目快速搭建,初始项目各个文件夹作用介绍和启动代码执行流程分析 前言 一.我的开发环境 二.使用 Vue CLI (Vue 脚手架)快速搭建项目 三.初始项目的目录结构 ...

  9. Docker 学习笔记 - 进阶四 Docker网络和 Docker compose

    Docker 学习笔记 - 进阶四 Docker网络和 Docker compose 4. docker 网络 4.1 docker network是什么 4.1.1 docker不启动,默认网络情况 ...

最新文章

  1. ms project(第一篇笔记)
  2. 专接本微型计算机原理考试,河北省2009年专接本-微型计算机原理与汇编语言试卷...
  3. R学习_multitaper包解析2:子函数spec.mtm.dpss,dpssHelper
  4. 数据结构(6) -- 查找
  5. python数据分析包pandas_Python 数据分析包:pandas 基础
  6. linux 修改ldap密码,centos – ldap强制用户更改密码
  7. (转)unity web 缓存解决方案
  8. python configure函数 循环_使用python统计git仓库中频繁修改的热点函数
  9. for循环连续创建对象
  10. 【紫书第六章】二叉树、欧拉图基本概念与性质
  11. 热烈庆祝阳光网驿-行业软件交流平台与北京汉邦极通科技有限公司成功合作
  12. 国际国内资管分仓跟单软件的具体作用
  13. Yolov4部署到ZYNQ系列1-USB转UART驱动不在COM和LPT显示问题的解决方案
  14. java action例子_实例——创建ActionForm Bean
  15. 何谓计算机思维(转载)
  16. java数据过载_java区分过载的方法
  17. Python练习——基础练习题1
  18. 听不够的三国,淡淡的乡愁
  19. 将本地docker镜像推送到阿里云仓库
  20. spring单例模式与线程安全问题的解决方案

热门文章

  1. [乱说]Electron 无边框窗口最大化最小化关闭功能
  2. python实现多功能计算器
  3. Java时间对比compareTo用法
  4. OpenCV实现人脸检测和68点定位
  5. 如何避免在PCB设计中出现电磁问题
  6. mac开发 oc 授权检测、申请、打开授权设置页面
  7. selenium模拟网页的键盘鼠标操作
  8. 月薪5万的项目经理,工作能力到底有多强?
  9. 单色背景抠图方法(绿色背景抠图、肤色检测)之——chroma kye
  10. 运营商大数据助力贷款行业快速精准获取意向客户