关于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 相关文章推荐
img的onload的另类用法
Jan 10 Javascript
用js 让图片在 div或dl里 居中,底部对齐
Jan 21 Javascript
jQuery前台数据获取实现代码
Mar 16 Javascript
js判断数组key是否存在(不用循环)的简单实例
Aug 03 Javascript
js实现动态显示时间效果
Mar 06 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
Jul 27 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
Aug 23 Javascript
基于Vue.js 2.0实现百度搜索框效果
Dec 28 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
Sep 28 Javascript
vue或react项目生产环境去掉console.log的操作
Sep 02 Javascript
VUE : vue-cli中去掉路由中的井号#操作
Sep 04 Javascript
js实现上传图片到服务器
Apr 11 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
zen cart实现订单中增加paypal中预留电话的方法
2016/07/12 PHP
PHP数据库操作二:memcache用法分析
2017/08/16 PHP
Laravel程序架构设计思路之使用动作类
2018/06/07 PHP
EASYUI TREEGRID异步加载数据实现方法
2012/08/22 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
2013/12/28 Javascript
JQuery中层次选择器用法实例详解
2015/05/18 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
2015/12/24 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
Vue系列:通过vue-router如何传递参数示例
2017/01/16 Javascript
bootstrap datepicker插件默认英文修改为中文
2017/07/28 Javascript
详解vue中axios的封装
2018/07/18 Javascript
深入理解Vue.js轻量高效的前端组件化方案
2018/12/10 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
实例讲解JavaScript 计时事件
2020/07/04 Javascript
[48:31]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第一场 2月2日
2021/03/11 DOTA
python实现梯度下降算法
2020/03/24 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
2019/06/28 Python
Python3 shutil(高级文件操作模块)实例用法总结
2020/02/19 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
2021/01/05 Python
世界闻名的衬衫制造商:Savile Row Company
2018/07/30 全球购物
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
C语言面试题
2013/05/19 面试题
怎样写留学自荐信
2013/11/11 职场文书
创业计划书的内容步骤和要领
2014/01/04 职场文书
平民服装店创业计划书
2014/01/17 职场文书
小学生家长评语集锦
2014/01/30 职场文书
学徒工职责
2014/03/06 职场文书
加强作风建设工作总结
2014/10/23 职场文书
2015年母亲节活动总结
2015/02/10 职场文书
水电施工员岗位职责
2015/04/11 职场文书
退休教师欢送会致辞
2015/07/31 职场文书
2016年万圣节活动个人总结
2016/04/05 职场文书
小学生作文之《压岁钱的烦恼》
2019/09/27 职场文书