关于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中变量相关的细节分析
Aug 13 Javascript
转自Jquery官方 jQuery1.1.3发布,速度提升800%,体积保持20K
Aug 19 Javascript
javascript操作cookie的文章(设置,删除cookies)
Apr 01 Javascript
Js获取事件对象代码
Aug 05 Javascript
idTabs基于JQuery的根据URL参数选择Tab插件
Apr 11 Javascript
JavaScript学习笔记之定时器
Jan 22 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
Aug 18 Javascript
AngularJS向后端ASP.NET API控制器上传文件
Feb 03 Javascript
JavaScript暂停和继续定时器的实现方法
Jul 18 Javascript
js循环map 获取所有的key和value的实现代码(json)
May 09 Javascript
vue中子组件传递数据给父组件的讲解
Jan 27 Javascript
JS实现换肤功能的方法实例详解
Jan 30 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时间戳与日期之间转换的实例介绍
2013/04/19 PHP
ThinkPHP使用smarty模板引擎的方法
2014/07/01 PHP
PHP SPL标准库之接口(Interface)详解
2015/05/11 PHP
PHP获取文件扩展名的4种方法
2015/11/24 PHP
可以将word转成html的js代码
2010/04/11 Javascript
JS target与currentTarget区别说明
2011/08/28 Javascript
解决js正则匹配换行问题实现代码
2012/12/10 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
2013/12/19 Javascript
JavaScript中的原型prototype属性使用详解
2015/06/05 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
js仿微信语音播放实现思路
2016/12/12 Javascript
jQuery实现动态添加tr到table的方法
2016/12/26 Javascript
Ionic+AngularJS实现登录和注册带验证功能
2017/02/09 Javascript
js实现拖拽功能
2017/03/01 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
2017/11/06 Javascript
Js面试算法详解
2018/04/08 Javascript
vue配置font-awesome5的方法步骤
2019/01/27 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
[15:23]教你分分钟做大人:虚空假面
2014/10/30 DOTA
python中pygame模块用法实例
2014/10/09 Python
Python中一行和多行import模块问题
2018/04/01 Python
python ipset管理 增删白名单的方法
2019/01/14 Python
Python3中列表list合并的四种方法
2019/04/19 Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
2019/11/25 Python
Python3读写Excel文件(使用xlrd,xlsxwriter,openpyxl3种方式读写实例与优劣)
2020/02/13 Python
Python实现电视里的5毛特效实例代码详解
2020/05/15 Python
Django中的模型类设计及展示示例详解
2020/05/29 Python
基于python实现操作redis及消息队列
2020/08/27 Python
html5唤醒APP小记
2019/03/27 HTML / CSS
Madewell美德威尔美国官网:美国休闲服饰品牌
2016/11/25 全球购物
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
贯彻落实“八项规定”思想汇报
2014/09/13 职场文书
工商局个人工作总结
2015/03/03 职场文书
PyTorch 如何自动计算梯度
2021/05/23 Python