草庐IT

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

coder 2023-10-05 原文

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 - 将一个 50 字段的表单提交到多个表;常规 POST、AJAX POST 或其他?的更多相关文章

    1. ruby - 其他文件中的 Rake 任务 - 2

      我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

    2. ruby-on-rails - Rails 3 中的多个路由文件 - 2

      Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

    3. ruby-on-rails - 在 Ruby 中循环遍历多个数组 - 2

      我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代

    4. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

      我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

    5. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

      使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

    6. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

      我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

    7. ruby-on-rails - 渲染另一个 Controller 的 View - 2

      我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

    8. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

      我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

    9. ruby - 如何模拟 Net::HTTP::Post? - 2

      是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

    10. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

      我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

    随机推荐