axios不发出请求,没有结果,没有错误

Posted

技术标签:

【中文标题】axios不发出请求,没有结果,没有错误【英文标题】:Axios not making request, no result, no error 【发布时间】:2018-07-30 23:10:03 【问题描述】:

vue2 中的 axios put 请求有问题 以下代码用于保存更新表单。

有 2 个流程调用此方法。

    您单击一个组织,window.location.hash 更改为用户填写表单并单击保存的组织 ID 用户转到带有 window.location.hash 在 url (#1 (#id)) 中的组织的页面,用户填写表单并点击保存

代码:

/**
 * Handle the update form.
 *
 * @param array selected
 * @return Promise
 */
update(selected) 
    this.$refs.updateForm.validate();
    console.log('1');
    return new Promise((resolve, reject) => 
        console.log('2');
        if (this.updateForm.valid) 
            console.log('3');
            this.$http
                .put('organisation/' + selected[0].id, this.updateForm.values)
                .then(() => 
                    console.log('10');
                    resolve();
                )
                .catch(error => 
                    console.log('NO');
                    console.log(error)
                );
            console.log('4');
        
    );
,

结果: 如果 1 一切正常,console.log:

OrganisationResource.vue?2497:135 1
OrganisationResource.vue?2497:138 2
OrganisationResource.vue?2497:140 3
OrganisationResource.vue?2497:151 4
OrganisationResource.vue?2497:144 10

如果情况 2 不起作用,则不会发出请求,console.log:

OrganisationResource.vue?2497:136 1
OrganisationResource.vue?2497:138 2
OrganisationResource.vue?2497:140 3

同样情况2,axios请求拦截器中的console.log不是 触发。在流程 2 之后,您在不刷新页面的情况下启动流程 1,它可以完美运行

我也不知道如何进一步调试。

【问题讨论】:

【参考方案1】:

您应该检查是否定义了selected[0]this.updateForm。否则访问会抛出,所以不会调用 axios 的 thencatch

【讨论】:

this.updateForm 被明确定义,因为if (this.updateForm.valid) 会抛出并且console.log(3) 不会记录。奇怪的是OP没有看到错误但可以看到日志。也许控制台显示的内容有一个过滤器(没有错误)。 promise 中确实存在错误。拒绝被调用,除了小吃店没有出现,这就是为什么我没有想到这一点。感谢您在此处和聊天中的帮助 @HMR 是的,此时没有考虑 if 子句,所以可能selected[0]【参考方案2】:

您可以尝试以下方法,它反映了您的代码正在做什么,即使它没有多大意义:

/**
 * Handle the update form.
 *
 * @param array selected
 * @return Promise
 */
update(selected) 
  return Promise.resolve()//switch to native promises
  .then(
    ()=>
      //any error will be caught with the .catch, no unprotected code
      //  function will always return a promise that resolves to undefined
      this.$refs.updateForm.validate();
      console.log('1');
      console.log('2');
      if (this.updateForm.valid) 
        console.log('3');
        return this.$http
          .put('organisation/' + selected[0].id, this.updateForm.values);
      //return undefined if not valid
    
  ).then(result => 
      console.log('10');//resolve with undefined if valid or invalid without error
  ).catch(
    error => //resolve to undefined with error
      console.log('NO');
      console.log(error)
  );
  console.log('4');
,

如果不使用原生 Promise,您可以改用 return this.$q.resolve()

【讨论】:

感谢您的回答,代码确实没有多大意义,但我肯定会在功能中尝试这个 @RicardovanLaarhoven 我更新了答案,不需要使用原生承诺,您可以支持更多浏览器(Internet Explorer)而无需 polyfil,因为 Angular 已经有一个 polyfil 用于承诺。

以上是关于axios不发出请求,没有结果,没有错误的主要内容,如果未能解决你的问题,请参考以下文章

发出帖子请求时出现Vuejs axios错误

发出多个 Axios 请求导致 CORS 错误

如何在反应中使用 axios 发出 POST 请求?

当我根据 DynDNS url 名称而不是 IP 发出 axios 请求时,为啥会出现 CORS 错误?

如何从reactjs发出Http请求?

使用 axios 发出请求时出现 MethodNotAllowedHttpException(流明)