`

解决vue-resource的post的问题

阅读更多

如题。通过这个错误,初学者能学到很多知识。

 

今天又同事用 vue-resource 搞了个post,后台用php,里面有获取参数tap。

$tap = $_REQUEST['tap'];

 

普通的jquery的ajax 的get和post都没有问题,但是vue-resource会导致php获取不到参数【上面那行代码报错的错误信息会连同报文一起返回到前端,导致前端获取到错误的json格式而解析出错】。分析请求头(谷歌浏览器的network里面看请求,小白自行百度搜如何看,很简单)发现 vue-resource是request payload,而jquery的是 form data。

 

自此定位为加请求头【如果不知道此方法的原因请百度搜 form data和request payload的区别, 上面也介绍了,并且有关键字 请求头(小白连请求头是什么都不知道也能通过这个关键字再自行百度一下)】

 

           var oMyForm = new FormData();
            oMyForm.append("tap", "holidayInfo");
            vm.$http.post(vm.url, oMyForm, {
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                }
            }).then(function (res) {
                console.log(res);
            });

 

 

就可以了。

 

不过中间还试过这个不行的也很有借鉴意义,顺便发出来给大家看看:

 

            vm.$http.post(vm.url, {"tap": "holidayInfo"}, {
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                }
            }).then(function (res) {
                console.log(res);
            });

 这样请求头虽然是 form data,但数据却比jquery的方式多了个括号。

 

 

再分析jquery的代码 会发现对于传入的data有个处理是 JQuery.param,一试,果然是它把 {"tap": "holidayInfo"} 转成 "tap"="holidayInfo" 的形式。

 

所以完美主义者可以自己写一个方法也这样转换一下,我这里为简单起见,直接用jquery提供的这个param方法了:

 

           vm.$http.post(vm.url, $.param({tap:'holidayInfo'}), {
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                }
            }).then(function (res) {
                console.log(res);
            });

 官网github上的介绍太过少了,作者不能这样啊,参数都不带说明让人很难用啊。

 

 

 回来正打算改一下其源码,搜了 找到一篇文章(百度里没源码),http://blog.csdn.net/qq_24122593/article/details/52954726 才发现可以通过配置  emulateJSON 参数来使请求头满足我们的要求:

vm.$http.post(url, {tap:'holidayInfo'}, {
    emulateJSON: true
}).then(function (res) {
    console.log(res);
});	

 

 我也是醉了,之前直接找如何设置 vue-resource的请求头、vue-resource配置、用法,半天没找到设置请求头的方法。 现在找一个无关的“vue-resource源码解析"倒是找到了。

 

 

分享到:
评论

相关推荐

    Vue-resource.js

    可以使用这个vue-resource.js在vue应用中发起get post 等请求

    vue学习之vue-resource请求

    npm install 引入vue-resource包 this.$http.get(’/someUrl’) this.$http.post(’/someUrl’,{foo:‘bar’}) (1) npm install vue-resource –save引入vue-resource包 (2)在store文件的main.js中配置vue-resource ...

    vue-resource.js

    该本为1.5.1,实现vue的交互,支持get/post/jsonp.....

    vue-resource

    可以使用这个vue-resource.js在vue应用中发起get或者 post 等请求

    vue-resource post数据时碰到Django csrf问题的解决

    公司最近用vue写前端,用vue-resource遇到的一些问题,现在记录下来。 vue-resource post数据 this.$http.post('/someUrl',data, [options]).then(function(response){ // 响应成功回调 }, function(response){ ...

    详解vue前后台数据交互vue-resource文档

    这两天学习了vue-resource插件个地方知识点挺多的,而且很重要,所以,今天添加一点小笔记。 Vue可以构建一个完全不依赖后端服务的应用,同时也可以与服务端进行数据交互来同步界面的动态更新。 Vue通过插件的形式...

    关于vue-resource报错450的解决方案

    import vueResource from 'vue-resource' Vue.use(vueResource) 2. 调取接口 Vue.http.post(url, { 'data1': data1, 'data2': 'data2' }).then(response => { console.log('success', response) }, response =...

    Vue-resource安装过程及使用方法解析

    import VueResource from 'vue-resource' //全局注册 Vue.use(VueResource) 3、vue-resource发送请求  a)对象参数,post请求 this.$http.post('http://127.0.0.1:8081/getUserByParam', { userName: this....

    Vue2学习笔记之请求数据交互vue-resource

    必须引入一个库:vue-resource github地址 // 基于全局Vue对象使用http Vue.http.get('/someUrl', [options]).then(successCallback, errorCallback); Vue.http.post('/someUrl', [body], [options]).then...

    详解vue与后端数据交互(ajax):vue-resource

    必须引入一个库:vue-resource 1.获取普通文本数据 比如:a.txt: welcomet to vue!!! <!DOCTYPE html> <html> <head> <title></title> <meta charset="utf-8"> [removed]...

    vue resource post请求时遇到的坑

    主要介绍了vue resource post请求时遇到的坑,需要的朋友可以参考下

    vue-shop:vue-shop构建web端购物商城网站

    基于Vue2.0 + vue-router + webpack + ES6/7 + nodejs + express 实现web端购物商城网站前端构架页面结构(H5,CSS3,原生JS)框架(基于Vue脚手架:vue-cli)进行搭建数据请求处理框架(vue-resource或者Axios)Vue-Router...

    详解Vue用axios发送post请求自动set cookie

    vue-resource不再维护之后,我也用起了axios,但是死活无法设置服务器发送过来的cookie 后来查询文档发现,这个是要单独配置的。 // `withCredentials` indicates whether or not cross-site Access-Control ...

    vue实现假数据的传递

    实现假数据的传递,post,get请求

    vue的$http的get请求要加上params操作

    vue-resource不更新了 补充知识:vue请求中 post get传参方式是不同的哦 我在学习vue,项目中post请求,get请求都用到了,我发现传参方式是不一样的。 post请求的例子: checkin (){ this.$http.post('my url',{ ...

    vue-cli3跨域配置的简单方法

    在vue-resource的数据请求中,一般我们会将请求方式GET/POST修改为jsonp的请求方式就可以实现跨域。 但是对于只支持GET/POST两种请求方式的api,修改jsonp,就会出错。需要进行跨域的配置。 (1)在文件根目录下,...

    vue resource发送请求的几种方式

    vue resource发送请求,代码如下所示; <!DOCTYPE html> <html> <head> <title>vue-resource</title> <meta charset=utf-8> </head> <body> <input type=...

    Vue resource中的GET与POST请求的实例代码

    下面介绍下vue-resource中常用的GET与POST请求使用与封装方法。 访问 Github 获取最新的开发文件与文档 特征: 支持 Promise API 和 URI Templates 支持请求过程中使用拦截器(interceptoers) 支持 Firefox,...

Global site tag (gtag.js) - Google Analytics