关于vue-resource报错450的解决方案


Posted in Javascript onJuly 24, 2017

本文介绍了关于vue-resource报错450的解决方案,分享给大家,具体如下:

一、基本使用:

1.页面引入

import vueResource from 'vue-resource'
 Vue.use(vueResource)

2. 调取接口

Vue.http.post(url, {
 'data1': data1,
 'data2': 'data2'
}).then(response => {
 console.log('success', response)
}, response => {
 console.log('error', response)
})

二、报错450

定位错误信息:请求header没有完全一一对应。Content-Type: application/x-www-form-urlencoded; charset=UTF-8应为Content-Type: application/json; charset=UTF-8,检查页面代码,发现已经设置了

Vue.http.interceptors.push(function (request, next) {
 request.headers.set('Content-Type', 'application/json; charset=UTF-8')
 request.headers.set('Content-Type', 'application/json')
 next()
})

只是页面没有起作用而已,那究竟是什么原因导致页面设置的Content-Type失效了呢?继续追溯,发现跟这行代码有关

// Vue.http.options.crossOrigin = true 
 // Vue.http.options.emulateHTTP = true
 Vue.http.options.emulateJSON = true //(跟这行代码有关)

三、分析

下面分别来讲一下这几行代码的用处,以及emulateJSON是怎么影响到Content-Type设置的。

1. Vue.http.options.crossOrigin

这个很明显是设置跨域的,此处不多讲。

2. Vue.http.options.emulateHTTP

参考地址:https://github.com/pagekit/vue-resource/blob/develop/src/http/interceptor/method.js

摘出源码

/**
 * HTTP method override Interceptor.
 */

export default function (request, next) {

  if (request.emulateHTTP && /^(PUT|PATCH|DELETE)$/i.test(request.method)) {
    request.headers.set('X-HTTP-Method-Override', request.method);
    request.method = 'POST';
  }

  next();
}

大概的意思就是如果请求方式为PUT|PATCH|DELETE,服务器又没法处理这几类请求的时候,设置Vue.http.options.emulateHTTP = true的话可以将X-HTTP-Method-Override设置为PUT|PATCH|DELETE,然后使用普通的post进行请求。

关于X-HTTP-Method-Override讲一下,它的使用场景是:

在某些HTTP代理不支持类似PUT|PATCH|DELETE这些类型HTTP请求的情况下,可以通过另一种完全违背协议的HTTP方法来"代理"。这种协议就是,使客户端发出HTTP POST请求并设置header里X-HTTP-Method-Override值为PUT|PATCH|DELETE。

3. Vue.http.options.emulateJSON

参考地址:https://github.com/pagekit/vue-resource/blob/develop/src/http/interceptor/form.js

摘出源码

/**
 * Form data Interceptor.
 */

import Url from '../../url/index';
import { isObject, isFormData } from '../../util';

export default function (request, next) {

  if (isFormData(request.body)) {

    request.headers.delete('Content-Type');

  } else if (isObject(request.body) && request.emulateJSON) {

    request.body = Url.params(request.body);
    request.headers.set('Content-Type', 'application/x-www-form-urlencoded');
  }

  next();
}

从第17行可以看到,如果设置了emulateJSON的话会默认加上这句

request.headers.set('Content-Type', 'application/x-www-form-urlencoded');

这就是为什么我们设置的Content-Type失效了。只要去掉Vue.http.options.emulateHTTP = true 或者直接置为false就可以了。

vue-resource(github)地址:https://github.com/pagekit/vue-resource

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js使用for循环与innerHTML获取选中tr下td值
Sep 26 Javascript
JavaScript通过Date-Mask将日期转换成字符串的方法
Jun 04 Javascript
jquery常用的12个小功能
Jul 22 Javascript
jQuery动态改变多行文本框高度的方法
Sep 07 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
Nov 03 Javascript
Vue中定义全局变量与常量的各种方式详解
Aug 23 Javascript
详解让sublime text3支持Vue语法高亮显示的示例
Sep 29 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
Jan 11 Javascript
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
Feb 08 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
Apr 08 Javascript
vue 项目build错误异常的解决方法
Apr 22 Javascript
简单了解JavaScript sort方法
Nov 25 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
Jul 24 #Javascript
react-router4 嵌套路由的使用方法
Jul 24 #Javascript
关于react-router的几种配置方式详解
Jul 24 #Javascript
简单实现js放大镜效果
Jul 24 #Javascript
Vue列表页渲染优化详解
Jul 24 #Javascript
javascript cookie的基本操作(添加和删除)
Jul 24 #Javascript
JavaScript取得gridview中获取checkbox选中的值
Jul 24 #Javascript
You might like
谏山创故乡大分县日田市水坝将设立《进击的巨人》立艾伦、三笠以及阿尔敏的铜像!
2020/03/06 日漫
社区(php&&mysql)六
2006/10/09 PHP
php 面向对象的一个例子
2011/04/12 PHP
php从给定url获取文件扩展名的方法
2015/03/14 PHP
php实现专业获取网站SEO信息类实例
2015/04/02 PHP
使用symfony命令创建项目的方法
2016/03/17 PHP
php str_getcsv把字符串解析为数组的实现方法
2017/04/05 PHP
PHP面向对象中new self()与 new static()的区别浅析
2017/08/17 PHP
laravel 之 Eloquent 模型修改器和序列化示例
2019/10/17 PHP
Javascript 面向对象特性
2009/12/28 Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
2016/05/10 Javascript
vue.js将unix时间戳转换为自定义时间格式
2017/01/03 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
2017/07/12 jQuery
微信小程序自定义模态对话框实例详解
2017/08/16 Javascript
细说webpack源码之compile流程-rules参数处理技巧(2)
2017/12/26 Javascript
vue使用transition组件动画效果的实例代码
2021/01/28 Vue.js
[04:45]上海特级锦标赛主赛事第三日TOP10
2016/03/05 DOTA
[03:56]DOTA2完美大师赛趣味视频之小鸽子和Mineski打台球
2017/11/24 DOTA
[09:47]2018DOTA2亚洲邀请赛4.5SOLO赛 No[o]ne vs Sumail
2018/04/06 DOTA
Python3实现连接SQLite数据库的方法
2014/08/23 Python
Python编程实现线性回归和批量梯度下降法代码实例
2018/01/04 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
2018/12/17 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
Tensorflow 多线程设置方式
2020/02/06 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
2020/04/25 Python
使用CSS3制作版头动画效果
2020/12/24 HTML / CSS
菲律宾票务网站:StubHub菲律宾
2018/04/21 全球购物
实体的生命周期
2013/08/31 面试题
学习雷锋倡议书
2014/04/15 职场文书
触电现场处置方案
2014/05/14 职场文书
教师四风问题对照检查材料
2014/09/26 职场文书
国庆横幅标语
2014/10/08 职场文书
pandas 实现将NaN转换为None
2021/05/14 Python
Django集成富文本编辑器summernote的实现步骤
2021/05/31 Python