jquery - 将一个 50 字段的表单提交到多个表;常规 POST、AJAX POST 或其他?

标签 jquery mysql performance coldfusion

Stackoverflow 的长期读者;第一次发海报,所以希望你能温柔:)

我在一个页面上有一个表单,由大约 50 个不同类型的字段(复选框/文本/十进制/日期等)组成。这些值是通过一个查询从大约 8 个表中提取的,大致如下所示:

SELECT * FROM p
LEFT JOIN pd on p.id=pd.id
LEFT JOIN pc on p.id=pc.id
LEFT JOIN pie on p.id=pie.id
etc.
WHERE p.id = xxx

我开始一天以为我只是在表单上使用一个简单的 POST,编写一堆验证和更新查询(用表单中的任何内容覆盖每个现有值)并完成它,但我质疑我的判断这里。

具体来说,如果现有值没有改变就覆盖它感觉是错误的,而且我有点担心如果数据库更新中途失败会发生什么(考虑用事务处理它)。我对较小的表格感到满意,但如果工作人员只更改了 1 或 2 个字段,这感觉就像是无用的写作。我的下一个想法是基于每个字段级别使其成为 AJAX。更改任何字段都会提交更改并保存。感觉它可能更有意义,即使我更愿意尽可能避免使用 js。当然,第三种选择是将其转换为具有多个提交按钮的多个表单,例如每个选项卡一个(表单已经分为多个选项卡),缺点是需要更频繁地重新加载页面,因为它需要更多提交(尽管在这里当然也可以使用 AJAX)。

我是否应该考虑这么多(到目前为止,我花了一天中的大部分时间阅读这里的旧线程......)?!这里涉及到一些财务数据,所以我主要关心的是可靠性和性能,但我也很好奇是否有其他人遵循的最佳实践?

---在实现以下选择的答案后更新---

作为 SO 的长期读者,我总是很欣赏提出问题的人后来跟进的线索,所以我想我自己会这样做。不确定正确的协议(protocol)或格式。

如上所述,我最终使用了 barnyr 的解决方案,它本质上使用 javascript 将提交时的表单与原始值进行比较,然后将更改发布到 mysql(使用 jquery 发布)。如果您正在考虑类似的情况,请考虑以下几点:
  • 首先,如果未选中,jquery 的序列化不会发送复选框/单选值。我明白他们的逻辑,但对我来说这没有意义。我在 http://tdanemar.wordpress.com/2010/08/24/jquery-serialize-method-and-checkboxes/ 使用了插件来解决这个问题。
  • 如果您在页面上编辑一个值,然后保存它,然后再次编辑它,返回到原始值,与页面加载时设置的初始值相比,您将收到“没有任何变化”的消息,没有任何变化。这是合乎逻辑的,但直到我完成并测试之后我才考虑这个。我真的不认为有任何方法可以保证通过简单的“覆盖表单提交时的所有内容”来保持此解决方案带来的复杂性,因此,如果您正在构建一个关心用户的公共(public)应用程序,我不会建议您使用此方法。
  • 在规范化方面,这个解决方案很漂亮,因为我可以防止将行添加到链接到包含用户 ID 的主要表的表中,除非将内容添加到这些特定字段。但是,如果第 2 点对我来说是一个大问题,那么将所有这些以一种大形式显示的值存储在一张大表中会大大降低代码的复杂性。我几乎是一个新手 wrt 规范化(所以在干草叉上放轻松),这当然主要是所有数据都以一种形式显示的结果。如果您使用多个表格,则这不再适用。
  • 系统的一部分涉及大量数字,在表单的其他部分汇总,通过 AJAX 完成所有这些意味着您必须非常小心并清楚当用户点击保存时究竟发生了什么变化。例如,他们可以更改程序价格,总价也应该更新,但是当您通过 AJAX 提交并且没有适当的重新加载时,您必须将所有这些代码重新编码到系统中。

  • 在这种情况下,第 2,3 和 4 点可以解决,但是如果我在开始时知道我现在所知道的,我可能会使用一个包含所有数据的大表,并在表单提交时简单地编辑整行。再说一次,我学到的东西会少很多,所以不后悔:) 希望这对那些在稍后阶段找到这个线程的人有所帮助。

    最佳答案

    好吧,我会将页面上的值与用户更改的值进行比较。然后我会将更改后的值发布到服务器,动态创建我的查询并仅更新已更改的字段。

    此外,如果您要更新多个表,则绝对应该使用事务。

    关于jquery - 将一个 50 字段的表单提交到多个表;常规 POST、AJAX POST 或其他?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16237314/

    相关文章:

    jQuery.val(...) 不会改变 DOM?

    javascript - 在带有 Node.js 的 Mongoose 中使用虚拟 getter 是否会对性能产生影响?

    javascript - jQuery $.data() 与 DOM 对象属性

    jquery - "There is no css animation matching the one you specified"剪切和粘贴下拉示例错误

    jquery - 当 URL 结束时告诉 jQuery?

    MySql 模式匹配

    php - http ://localhost/myphpadmin/index. php 只显示代码

    mysql - 将历史数据附加到非历史表

    python - 为什么 dict.get(key) 比 dict[key] 运行得慢

    javascript - 如果页面不活动,Chrome 会减慢 javascript