关于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 快捷键设置实现代码
Mar 13 Javascript
jQuery-serialize()输出序列化form表单值的方法
Dec 26 Javascript
jQuery 无刷新分页实例代码
Nov 12 Javascript
Javascript中this的用法详解
Sep 22 Javascript
基于jquery实现全屏滚动效果
Nov 26 Javascript
使用jquery/js获取iframe父子级、同级获取元素的方法
Aug 05 Javascript
JavaScript中的ajax功能的概念和示例详解
Oct 17 Javascript
Javascript 闭包详解及实例代码
Nov 30 Javascript
基于jquery日历价格、库存等设置插件
Jul 05 jQuery
详解JS函数stack size计算方法
Jun 18 Javascript
JS实现的简单分页功能示例
Aug 23 Javascript
Vue.js实现的购物车功能详解
Jan 27 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
Get或Post提交值的非法数据处理
2006/10/09 PHP
PHP项目开发中最常用的自定义函数整理
2010/12/02 PHP
destoon实现公司新闻详细页添加评论功能的方法
2014/07/15 PHP
php一行代码获取文件后缀名实例分析
2014/11/12 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
2019/05/09 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
2020/07/10 PHP
摘自百度的图片轮换效果代码
2007/11/19 Javascript
javascript 内存回收机制理解
2011/01/17 Javascript
javascript jq 弹出层实例
2013/08/25 Javascript
jQuery DOM操作实例
2014/03/05 Javascript
jQuery中选择器小问题(新人难免遇到)
2014/03/31 Javascript
原生js的弹出层且其内的窗口居中
2014/05/14 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
2014/10/17 Javascript
Prototype框架详解
2015/11/25 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
2016/06/14 Javascript
Vue概念及常见命令介绍(1)
2016/12/08 Javascript
javascript中this用法实例详解
2017/04/06 Javascript
input框中自动展示当前日期yyyy/mm/dd的实现方法
2017/07/06 Javascript
js获取文件里面的所有文件名(实例)
2017/10/17 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
vue中axios解决跨域问题和拦截器的使用方法
2018/03/07 Javascript
微信小程序时间选择插件使用详解
2018/12/28 Javascript
深入解析koa之中间件流程控制
2019/06/17 Javascript
js设置默认时间跨度过程详解
2019/07/17 Javascript
JS回调函数 callback的理解与使用案例分析
2019/09/09 Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
2019/11/13 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
Python StringIO模块实现在内存缓冲区中读写数据
2015/04/08 Python
Python模块结构与布局操作方法实例分析
2017/07/24 Python
django框架使用orm实现批量更新数据的方法
2019/06/21 Python
python Zmail模块简介与使用示例
2020/12/19 Python
德国家具在线:Fashion For Home
2017/03/11 全球购物
大学生涯自我鉴定
2014/01/16 职场文书
九年级语文教学反思
2014/02/04 职场文书
捐资助学倡议书
2014/04/15 职场文书