使用this.$store.dispatch时接口请求了两次

在最外层的app.vue中有这么一段代码

created: function() {
    this.getTopNav()
    router.beforeEach((to, from, next) => {
      next()
      //路由变化时执行
      if(to.name !== from.name){
        this.getTopNav()
        console.log(222)
        this.$store.dispatch('FECTH_ISLOGINED')
      }
    })
  }

这是store.js

const actions = {
    //是否已登录
    FECTH_ISLOGINED: function({commit}){
        axios.get('/account/user/islogined').then(res => {
            commit('TOGGLE_ISLOGINED', { all: res.data.isLogined});
            }).catch(err => console.log(err))
        }
}

路由变化时console只输出了一次,但是this.$store.dispatch('FECTH_ISLOGINED'),打开控制台看到实际上发起了两个ajax请求,求大神帮看下?不胜感激

阅读 25.8k
5 个回答

希望采纳 可以给其他人看

两次请求分别返回204和200

下面是百度百科对于204返回码的说明

204 No Content
服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息。响应可能通过实体头部的形式,返回新的或更新后的元信息。如果存在这些头部信息,则应当与所请求的变量相呼应。
如果客户端是浏览器的话,那么用户浏览器应保留发送了该请求的页面,而不产生任何文档视图上的变化,即使按照规范新的或更新后的元信息应当被应用到用户浏览器活动视图中的文档。
由于204响应被禁止包含任何消息体,因此它始终以消息头后的第一个空行结尾。

然后说原因
axios用的是ES6的Promise

等你查完这两个就可以知道具体为什么了 - 表示也是今天勉强知道大概为什么 但是可能因为基本功不扎实 所以还是不知道怎么表述 希望采纳 给其他人一个引路针

新手上路,请多包涵

跨域的原因吧

检查组建中是否 含有重复的方法名定义,可能由于文件复制等原因造成方法名重复定义

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题