关于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 19 Javascript
JS window.opener返回父页面的应用
Oct 24 Javascript
jquery获取ASP.NET服务器端控件dropdownlist和radiobuttonlist生成客户端HTML标签后的value和text值
Jun 28 Javascript
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
Jun 17 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
Aug 28 Javascript
JS实现鼠标经过好友列表中的好友头像时显示资料卡的效果
Jul 02 Javascript
JavaScript中的无阻塞加载性能优化方案
Oct 10 Javascript
node.js中的http.get方法使用说明
Dec 14 Javascript
实例详解jQuery结合GridView控件的使用方法
Jan 04 Javascript
AngularJs ng-route路由详解及实例代码
Sep 14 Javascript
js实现点击上传图片并设为模糊背景
Aug 02 Javascript
vue组件是如何解析及渲染的?
Jan 13 Vue.js
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生成缩略图的类代码
2008/10/02 PHP
Codeigniter实现智能裁剪图片的方法
2014/06/12 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
2016/03/06 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
一个基于jQuery的树型插件(OrangeTree)使用介绍
2012/05/03 Javascript
js冒泡法和数组转换成字符串示例代码
2013/08/14 Javascript
js转义字符介绍
2013/11/05 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
2015/05/06 Javascript
javascript图片滑动效果实现
2021/01/28 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
jQuery实现的背景颜色渐变动画效果示例
2017/03/24 jQuery
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
js遍历获取表格内数据的方法(必看)
2017/04/06 Javascript
JS中的三个循环小结
2017/06/20 Javascript
BetterScroll 在移动端滚动场景的应用
2017/09/18 Javascript
基于Vue的移动端图片裁剪组件功能
2017/11/28 Javascript
基于vue2.0动态组件及render详解
2018/03/17 Javascript
Windows下Node爬虫神器Puppeteer安装记
2019/01/09 Javascript
JS实现马赛克图片效果完整示例
2019/04/13 Javascript
js实现带有动画的返回顶部
2020/08/09 Javascript
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
[46:42]DOTA2-DPC中国联赛正赛 Aster vs Magma BO3 第二场 3月5日
2021/03/11 DOTA
python中使用%与.format格式化文本方法解析
2017/12/27 Python
pandas groupby 分组取每组的前几行记录方法
2018/04/20 Python
深入理解python中sort()与sorted()的区别
2018/08/29 Python
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
HTML5计时器小例子
2013/10/15 HTML / CSS
One.com挪威:北欧成长最快的网络托管公司
2016/11/19 全球购物
西雅图的买手店:Totokaelo
2019/10/19 全球购物
介绍一下结构化程序设计方法和面向对象程序设计方法的区别
2012/06/27 面试题
Java Servlet的主要功能和作用是什么
2014/02/14 面试题
质检员岗位职责
2013/12/17 职场文书
企业党支部工作总结2015
2015/05/21 职场文书
采购员工作总结范文
2015/08/12 职场文书
python基于tkinter制作下班倒计时工具
2021/04/28 Python
python Django框架快速入门教程(后台管理)
2021/07/21 Python