2017-03-04 66 views
2

我有一个包含约30个字段和过去两天的Vuex存储我一直在试图弄清楚如何在将它传递到AJAX之前正确收集它post方法。我知道Vuex属性是被动的,这可能会导致问题。我一直在运行测试来获得这个dang的东西来正确地填充我的Asp.Net控制器,这就是我发现的。准备Vuex存储数据的正确方法为AJAX调用

下面的日志显示AJAX调用之前和之后。

我硬编码对象工作得很好,但这只是为了测试目的:

var obj = { 
    'essay': 'hardcoded nonsense is nonsense', 
    'age': 28 
} 

我的下一个尝试是直接传递store.state作为数据对象,但是这也传递了很多不需要的材料,并没有按不适用于较大的物体。

然后我试图将其转换为JSON,希望它会删除所有的垃圾我不需要(idea come from here

var jsonData = JSON.parse(JSON.stringify(store.state))

一个朋友建议我用_lodash去除所有多余的东西,但它只是结束了空当它击中了我的.Net控制器(idea came from here

var lodashData = _.omitBy(store.state, _.isNil)

即使所有的结果甲肝成功注销,只有前两个实际将任何数据传递给我的控制器。

什么是正确的方式去做这样的事情?

enter image description here

var jsonData = JSON.parse(JSON.stringify(store.state)) 

var lodashData = _.omitBy(store.state, _.isNil) 

export default { 
    name: 'demo-submit', 
    methods: { 
    submit() { 
     console.log('hardcoded object', obj) 
     $.post('/Contest/UploadInfo', obj) 
     .done(function (response, status, jqxhr) { 
     console.log('success: hardcoded obj', obj) 
     }) 
     .fail(function(jqxhr, status, error) { 
      console.log('error: hardcoded') 
     }); 

     console.log('store.state', store.state) 
     $.post('/Contest/UploadInfo', store.state) 
     .done(function (response, status, jqxhr) { 
     console.log('success: store.state', store.state) 
     }) 
     .fail(function(jqxhr, status, error) { 
      console.log('error: store.state') 
     }); 

     console.log('jsonData', jsonData) 
     $.post('/Contest/UploadInfo', jsonData) 
     .done(function (response, status, jqxhr) { 
     console.log('success: jsonData', jsonData) 
     }) 
     .fail(function(jqxhr, status, error) { 
      console.log('error: jsonData') 
     }); 

     console.log('lodashData', _.omitBy(store.state, _.isNil)) 
     $.post('/Contest/UploadInfo', lodashData) 
     .done(function (response, status, jqxhr) { 
     console.log('success: lodashData', lodashData) 
     }) 
     .fail(function(jqxhr, status, error) { 
      console.log('error: lodashData') 
     }); 
    } 
    } 
} 

回答

3

JSON.parseJSON.stringify应该工作。你的状态结构是否正确?请提供您的州代码。

如果没有出于某种原因(不知道)工作,对于简单的情况下,我认为你可以只是这样做:

const payload = { 
    age: store.state.age, 
    essay: store.state.essay 
} 

如果你有很多领域,为它编写一个函数:

const toPlainObject = (state, keys) => { 
    const obj = {} 
    keys.forEach(key => { 
    obj[key] = state[key] 
    }) 
    return obj 
} 

const payload = toPlainObject(store.state, ['age', 'essay']) 

如果您不想指定的字段,只是用for .. in遍历整个状态。