vue可以在全局环境中使用和局部环境使用
// 基于全局Vue对象使用http Vue.http.get('/someUrl', [options]).then(function(){ console.log('成功回调') }, function(){ console.log('失败回调') }); Vue.http.post('/someUrl', [body], [options]).then(successCallback, errorCallback); 或者 Vue.http({ url: 'http://example.com/book', method: 'JSONP', jsonp: 'cb' }); // 在一个Vue实例内使用$http this.$http.get('/someUrl', [options]).then(successCallback, errorCallback); this.$http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);
参数 | 类型 | 描述 |
---|---|---|
url | string |
请求的URL |
method | string |
请求的HTTP方法,例如:’GET’, ‘POST’或其他HTTP方法 |
body | Object , FormData string |
request body |
params | Object |
请求的URL参数对象 |
headers | Object |
request header ,涉及跨域时 无效,
关于请求头部信息参考:https://sdeno.com/?p=6375 |
timeout | number |
单位为毫秒的请求超时时间 (0 表示无超时时间) |
before | function(request) |
请求发送前的处理函数,类似于jQuery的beforeSend函数 |
progress | function(event) |
ProgressEvent回调处理函数 |
credentials | boolean |
表示跨域请求时是否需要使用凭证 |
emulateHTTP | boolean |
发送PUT, PATCH, DELETE请求时以HTTP POST的方式发送,并设置请求头的X-HTTP-Method-Override |
emulateJSON | boolean |
将request body以application/x-www-form-urlencoded content type发送 |
emulateHTTP
emulateHTTP(布尔值)。默认值为:false,设置值为true时,PUT, PATCH和DELETE等请求会以普通的POST方法发出,并且HTTP头信息的X-HTTP-Method-Override属性会设置为实际的HTTP方法。。
emulateJSON
emulateJSON(布尔值)。默认值为:false,设置值为true时,数据(无论是get还是post)都会以formdata(表单提交方式)的形式发送数据。所以我们在给后台传递参数的时候需要加JSON.stringify(参数)处理一下。
如果服务器无法处理编码为application/json的请求,可以启用emulateJSON选项。启用之后,请求会以application/x-www-form-urlencoded为MIME type,就像普通的HTML表单一样。
全局设置:
Vue.http.options.emulateHTTP = true; Vue.http.options.emulateJSON = true;
get:
this.$http.get('get.php',{params:{a:1,b:2}}).then(function(res){ alert(res.body); },function(res){ console.log(res.status); });
post:
客户端要发数据给后台时
this.$http.post('post.php',{a:1,b:2}},{emulateJSON:true}).then(function(res){ alert(res.body); },function(res){ console.log(res.status); });
jsonp:
url :https://sug.so.360.cn/suggest?callback=suggest_so&word=a new Vue({ el:'#app', mounted:function () { this.$http.jsonp('https://sug.so.360.cn/suggest',{ params:{word:'a'}, //传给服务器的参数 jsonp:'callback', //服务器那边接收的字段 $_POST['callback'] headers: {"xxx": "xxxx"} //客户端自定义请求头信息传给服务器,但是在跨域情况下无效。 }).then(function(res){ console.log(res.data); },function(res){ console.log('失败'); }); } }); //另一种格式 this.$http({ url: 'https://sug.so.360.cn/suggest', params: { word:'a' }, method: 'JSONP', jsonp: 'callback' //一般默认都是callback,如果有变化根据接口的规则来,例如/suggest?callback187=suggest_so,改成jsonp: 'callback187' }).then(function (res) { console.log(res.body); }, function (res) { console.log('错误回调'); });
跨域相关内容查看:https://sdeno.com/?p=3647
interceptors数据劫持 类似before 、after
Vue.http.interceptors.push(function(request, next) { // ... // 请求发送前的处理逻辑 (类似$.ajax的beforeSend,在请求服务器的url之前,做一些处理之后在请求) // ... request.params.c='sdf'; //例如:在请求服务器url前,突然又想额外加一个参数 request.headers.set('Server', 'asfsdf222'); //这里设置请求头,也就是客户端发给服务器的Request headers,在服务器那里接收 next(function(response) { // ... // 请求发送后的处理逻辑 (当客户端请求后台数据时,后台即将要发数据给客户端之前,这里又可以额外的做一些处理) // ... // 根据请求的状态,response参数会返回给successCallback或errorCallback response.body=response.body+'1231323'; return response }) }); new Vue({ el:'#app', mounted:function () { this.$http.get('http://www.vc.com/v3/blank',{params:{a:1,b:2}}).then(function(res){ //请求url前又额外添加了一个参数c=sdf // alert(res.body); console.log(res.body); //<---这里返回的数据内容多了'1231323' },function(res){ console.log(res.status); }); } });