vue 几种ajax

作者: sugar_crush | 来源:发表于2018-12-13 15:09 被阅读0次

1.原生XMLHTTPREQUEST:这里不做解释

2.window下的fetch(基于promise)

它响应里有个json()方法,这也是个promise,所以也得使用.then。调用这个方法就可以得到请求的东西了。

fetch('https://jsonplaceholder.typicode.com/todos/1')
  .then(response => response.json())
  .then(json => console.log(json))

3.vue-resourse(已经停更)

引入CDN或者npm后,会在vue的实例上多一个$http的对象,用于ajax请求, 听说VUE不更新这个东西了。

this.$http.get('https://jsonplaceholder.typicode.com/todos/1')
    .then(resp => {
      console.log(resp);
      return resp.json()
    })
    .then(res => {
      console.log(res)
    })

4.axios(most popular)

安装axios或者引入CDN,也是基于promise,如果你习惯用vue-resourse:

Vue.prototype.$http = axios;
this.$http.get(url)

将其绑定在Vue实例原型上即可使用。

axios配置路由拦截:

ajax.interceptors.request.use() 与ajax.interceptors.response.use()

// 使用axios.create创建一个axios实例
const ajax = axios.create({
  baseURL: 'https://jsonplaceholder.typicode.com'
});
//  拦截器,拦截请求, 只要一有请求,就会执行use里的方法, config就是请求的参数
ajax.interceptors.request.use((config) => {
  // 可以在这里更改请求参数,一般用于获取web本地存储的用户token
  config.headers['xxx-token'] = 'adsfqsaddggag'; //headers、body都行
  vm.isLoading = true;   //v-if来判断提示加载中
  return config;
});
//  拦截器,拦截响应,只要一有ajax数据返回,就会执行use里的方法
ajax.interceptors.response.use((resp) => {
  console.log('xxxx', resp)
  // 在这里可以统一处理数据异常,但是前提是:后端数据足够规范!!!!
  vm.isLoading = false;
  if (resp.status === 200) {
    return resp.data       //到时候请求的时候,直接拿到data(不含status那些)
  } else {
    alert('出错了!')
  }
});
// 把ajax赋值给Vue.prototype.$http
//这样在vue的实例里就可以通过this.$http来调用ajax
Vue.prototype.$http = ajax;

5.jQuery的ajax:

引入jquery,ajax有请求类型type配置,默认为GET。

  $.ajax({
    url: 'https://jsonplaceholder.typicode.com/todos/1',
    type: "GET",
    success: function(resp) {
      console.log(resp)
    }
  })
jQuery的路由拦截配置:
$.ajaxSetup({
  beforeSend: function() {
    console.log('开始请求')
    $('.loading').show();    //提示加载中
  },
  complete: function() {
    $('.loading').hide();
  }
})

相关文章

网友评论

    本文标题:vue 几种ajax

    本文链接:https://www.haomeiwen.com/subject/mszvhqtx.html