关于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工具方法弹出蒙版
May 08 Javascript
js控制frameSet示例
Sep 10 Javascript
angularjs自定义ng-model标签的属性
Jan 21 Javascript
jQuery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较
Jul 14 Javascript
js中的DOM模拟购物车功能
Mar 22 Javascript
详解Angular CLI + Electron 开发环境搭建
Jul 20 Javascript
vue.js声明式渲染和条件与循环基础知识
Jul 31 Javascript
Vue组件选项props实例详解
Aug 18 Javascript
动态加载JavaScript文件的3种方式
May 05 Javascript
Vue二次封装axios为插件使用详解
May 21 Javascript
创建echart多个联动的示例代码
Nov 23 Javascript
mpvue小程序循环动画开启暂停的实现方法
May 15 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相关资料
2006/10/09 PHP
PHP中的日期处理方法集锦
2007/01/02 PHP
MySql数据库查询结果用表格输出PHP代码示例
2015/03/20 PHP
PHP+MySQL实现的简单投票系统实例
2016/02/24 PHP
Yii控制器中操作视图js的方法
2016/07/04 PHP
PHP二维数组分页2种实现方法解析
2020/07/09 PHP
Bootstrap前端开发案例二
2016/06/17 Javascript
AngularJS实现一次监听多个值发生的变化
2016/08/31 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
基于BootStrap的前端分页带省略号和上下页效果
2017/05/18 Javascript
js随机生成一个验证码
2017/06/01 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
2018/05/25 Javascript
JavaScript常用工具方法封装
2019/02/12 Javascript
如何解决日期函数new Date()浏览器兼容性问题
2019/09/11 Javascript
Vue watch响应数据实现方法解析
2020/07/10 Javascript
[47:55]Ti4第二日主赛事败者组 NaVi vs EG 1
2014/07/20 DOTA
[01:16:01]VGJ.S vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
Python实现的一个自动售饮料程序代码分享
2014/08/25 Python
python连接字符串的方法小结
2015/07/13 Python
Python编程中装饰器的使用示例解析
2016/06/20 Python
Python实现PS滤镜中马赛克效果示例
2018/01/20 Python
Python利用WMI实现ping命令的例子
2019/08/14 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
2020/06/06 Python
Python2手动安装更新pip过程实例解析
2020/07/16 Python
一文详述 Python 中的 property 语法
2020/09/01 Python
捐款倡议书怎么写
2014/05/13 职场文书
2014年信访工作总结
2014/11/17 职场文书
给老婆的道歉信
2015/01/20 职场文书
2015年医院药剂科工作总结
2015/05/04 职场文书
2015年党总支工作总结
2015/05/25 职场文书
大学同学聚会感言
2015/07/30 职场文书
关于公司年会的开幕词
2016/03/04 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL