当前位置: 首页 > 知识库问答 >
问题:

为AJAX调用准备Vuex存储数据的正确方法

宗乐池
2023-03-14

我有一个Vuex存储,它包含大约30个字段,在过去的两天里,我一直在试图找出如何在将其传递到AJAX post方法之前正确地收集它。我知道Vuex属性是反应性的,这可能会导致问题。我一直在运行测试以使这个该死的东西正确地填充我的Asp.Net控制器,下面是我的发现。

下面的日志显示了AJAX调用前后的情况。

我的硬编码对象工作正常,但这只是出于测试目的:

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

我的下一个尝试是直接将store.state作为数据对象传递,但这也传递了大量不需要的材料,对较大的对象不起作用。

然后我试着把它转换成JSON,希望它能删除所有我不需要的垃圾(想法来自这里)

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

一位朋友建议我使用\u lodash删除所有多余的内容,但一旦它击中我的.Net控制器,它就变成了空的(这个想法来自这里)

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

尽管所有结果都已成功注销,但实际上只有前两个结果向我的控制器传递了任何数据。

做这种事的正确方法是什么?

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')
      });
    }
  }
}

共有1个答案

孔驰
2023-03-14

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'])

如果您不想指定字段,只需为..使用。。在中迭代整个状态。

 类似资料:
  • 问题内容: 让我解释一下:我并不是在问将特定日期时间的时区存储在数据库中的正确方法。我说的是时区本身。例如: 我有一个名为“用户”的MySQL表。现在,在此表上,我希望有一列包含用户居住地的时区(由用户提供,将从列表中选择)。我正在使用PHP,其中包含类似以下时区字符串的列表: 美国时区列表 现在,显而易见的解决方案(至少对我而言)是在“用户”表中创建VARCHAR列,然后将PHP使用的时区字符串

  • 我想预测具有以下形式的数据分类: 分类器;文本描述 null

  • 问题内容: 你在哪里存储 用户特定的 和 计算机特定 的运行时 配置数据J2SE应用程序? (例如,在Windows上为 C:\ Users \ USERNAME \ AppData \ Roaming _ ,在Unix上为 / home / username_ ) 如何以独立于平台的方式在文件系统中获取这些位置? 谢谢你的建议! 问题答案: 这取决于您的J2SE应用程序类型: J2SE可执行JA

  • 由于遗留原因,我们有很多代码坐在存储过程下。类似于spring数据(@procedure),在micronaut中有没有一种方法可以调用存储过程。我是否必须注入entityManager并使用CreateNamedStoredProcedureQuery()。

  • 在我的laravel项目中,我通过资源控制器插入数据。但是现在我想使用ajax请求,使用相同的路由和相同的资源控制器方法来插入我如何发送url以及如何向它发送表单数据。 路线 控制器 模型 添加表单div ajax函数的js代码

  • 本文向大家介绍SQL SERVER备份数据库存储过程的方法,包括了SQL SERVER备份数据库存储过程的方法的使用技巧和注意事项,需要的朋友参考一下 sqlserver批量导出存储过程 在查询分析器中,选中数据库——》右键“任务”——》在弹出菜单中选择“生成脚本” ——》“下一步”——》选择你要存储过程所在数据库——》 “下一步”——》勾选“存储过程”,并下一步——》 勾选你要生成的存储过程名称