【问题标题】:How can I display error from response ajax?如何显示来自响应 ajax 的错误?
【发布时间】:2018-08-26 03:44:28
【问题描述】:

我的脚本 ajax 是这样的:

this.$store.dispatch('changePassword', {password})
.then((response) => {
    console.log('resp')
    console.log(response)
})
.catch(error => {
    console.log('er')
    console.log(error)
});

我使用 vue 组件/vuex 商店

当脚本运行时,选项卡控制台上的结果如下:

如果我在标签网络中签入标签响应,结果如下:

我想获得价值:

旧密码确认不匹配。

我在响应/错误上有 console.log,但我没有找到对象

如何获得价值?

更新

我的 vuex 模块是这样的:

import { set } from 'vue'
import users from '../../api/users'
import * as types from '../mutation-types'
// initial state
const state = {
    addStatusChangePassword: null
}
// getters
const getters = {
    changePasswordStatus: state =>  state.changePasswordStatus,
}
// actions
const actions = {
    changePassword ({ dispatch,commit,state },{password})
    {
        return users.changePassword(password,
            data => {
                commit(types.CHANGE_PASSWORD_SUCCESS)
            },
            errors => {
                commit(types.CHANGE_PASSWORD_FAILURE)
            }
        )
    }
}
// mutations
const mutations = {
    [types.CHANGE_PASSWORD_SUCCESS] (state){
        state.addStatusChangePassword = 'success'
    },
    [types.CHANGE_PASSWORD_FAILURE] (state){
        state.addStatusChangePassword = 'failure'
    }
}

export default {
    state,
    getters,
    actions,
    mutations
}

我的 vuex api 是这样的:

import Vue from 'vue'
export default {
    // api to change password
    changePassword (password, cb, ecb = null) {
        return axios.post('/member/profile/change-password', password).then(
            (resp) => {
                return resp.data;
            }, 
            (resp) => {
                return resp.data;
            }
        );
    }
}

【问题讨论】:

  • 显示changePassword操作的代码
  • 您的操作似乎发现了错误。不看代码很难知道发生了什么。
  • @acdcjunior 看看我的问题。我已经更新了
  • @Mark_M 看看我的问题。我已经更新了

标签: javascript jquery ajax vue.js vue-component


【解决方案1】:

在您的changePassword 中,您正在传递您的data,但您是:

  • 不区分错误(changePassword 的两个路径都只是返回数据);也是
  • 在您的操作中忽略 dataerrors 参数。

以下更改。

在您的changePassword 中添加适当的Promise

import Vue from 'vue'
export default {
    // api to change password
    changePassword (password, cb, ecb = null) {
        return new Promise((resolve, reject) =>                            // added       
          axios.post('/member/profile/change-password', password).then(
            (resp) => {
                resolve(resp.data);                                        // resolve()
            }, 
            (resp) => {
                reject(resp);                                         // reject() without .data
            }
         )
       );
    }
}

并且,在您的操作中,还要添加Promise

// actions
const actions = {
    changePassword ({ dispatch,commit,state },{password})
    {
        return new Promise((resolve, reject) =>                            // added       
         users.changePassword(password,
            data => {
               commit(types.CHANGE_PASSWORD_SUCCESS)
               resolve(data);                                                // forward
            },
            errors => {
               commit(types.CHANGE_PASSWORD_FAILURE)
               reject(errors);                                               // forward
            }
        ));
    }
}

【讨论】:

  • 是一样的。它不起作用。如果我console.log(resp),结果:Error: Request failed with status code 422
  • 立即查看。使用reject(resp) 而不是reject(resp.data)
  • 哦,对不起,请稍等。
  • 这样,您还必须将承诺添加到操作中。请重试。
  • 什么相同?你能说得更具体点吗?
猜你喜欢
  • 2019-02-20
  • 2017-09-12
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多