关于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 相关文章推荐
JavaScript 学习点滴记录
Apr 24 Javascript
jquery操作select option 的代码小结
Jun 21 Javascript
js substr、substring和slice使用说明小记
Sep 15 Javascript
JavaScript事件处理器中的event参数使用介绍
May 24 Javascript
浏览器兼容console对象的简要解决方案分享
Oct 24 Javascript
js中confirm实现执行操作前弹出确认框的方法
Nov 01 Javascript
node网页分段渲染详解
Sep 05 Javascript
使用JQuery选择HTML遍历函数的方法
Sep 17 Javascript
基本DOM节点操作
Jan 17 Javascript
从零开始搭建webpack+react开发环境的详细步骤
May 18 Javascript
微信小程序跨页面传递data数据方法解析
Dec 13 Javascript
vue图片上传组件使用详解
Dec 23 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
php设计模式 Delegation(委托模式)
2011/06/26 PHP
thinkPHP5.0框架独立配置与动态配置方法
2017/03/17 PHP
jquery 指南/入门基础
2007/11/30 Javascript
javascript prototype 原型链
2009/03/12 Javascript
extJs 常用到的增,删,改,查操作代码
2009/12/28 Javascript
javascript 函数声明与函数表达式的区别介绍
2013/10/05 Javascript
Javascript对象属性方法汇总
2013/11/21 Javascript
实现51Map地图接口(示例代码)
2013/11/22 Javascript
javascript中的取反再取反~~没有意义
2014/04/06 Javascript
jquery重复提交请求的原因浅析
2014/05/23 Javascript
JavaScript中的this机制
2016/01/30 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
最佳的JavaScript错误处理实践
2016/07/16 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
js前端导出Excel的方法
2017/11/01 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
在小程序中使用Echart图表的示例代码
2018/08/02 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
2018/08/07 Javascript
Vue封装的可编辑表格插件方法
2018/08/28 Javascript
Vue+Element UI+Lumen实现通用表格分页功能
2019/02/02 Javascript
vue在index.html中引入静态文件不生效问题及解决方法
2019/04/29 Javascript
package.json中homepage属性的作用详解
2020/03/11 Javascript
js+css3实现简单时钟特效
2020/09/13 Javascript
[44:39]2014 DOTA2国际邀请赛中国区预选赛 NE VS CNB
2014/05/21 DOTA
python中logging库的使用总结
2017/10/18 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
pytorch获取vgg16-feature层输出的例子
2019/08/20 Python
Pycharm 2020年最新激活码(亲测有效)
2020/09/18 Python
HTML5中使用postMessage实现两个网页间传递数据
2016/06/22 HTML / CSS
Monnier Frères美国官网:法国知名奢侈品网站
2016/11/22 全球购物
视光学专业毕业生推荐信
2013/10/28 职场文书
写给父母的感谢信
2015/01/22 职场文书
专职安全员岗位职责
2015/04/11 职场文书
干部作风纪律整顿心得体会
2016/01/23 职场文书
MongoDB 常用的crud操作语句
2021/06/20 MongoDB