Forms 我可以不用提交就从Perl中的formbuilder字段中读取值吗?

Forms 我可以不用提交就从Perl中的formbuilder字段中读取值吗?,forms,perl,cgi,formbuilder,Forms,Perl,Cgi,Formbuilder,我正在研究使用CGI::FormBuilder的现有代码,我已经阅读了所有文档,以了解这是如何工作的,但我并不100%相信它会工作。代码有几个自由格式的字段和3个按钮:更新、取消和测试。“测试”按钮使用字段中输入的设置发送电子邮件 在表单的JS中,我在单击“Test”时使用ajax调用,以便执行表单中的perl代码。“更新”和“取消”按钮的返回方式与表单提交时的返回方式相同。这样做的原因是,当发送测试电子邮件时,我不希望用户被带到返回的页面,而是保持表单上的值不变,这样,如果值是正确的,用户就不

我正在研究使用CGI::FormBuilder的现有代码,我已经阅读了所有文档,以了解这是如何工作的,但我并不100%相信它会工作。代码有几个自由格式的字段和3个按钮:更新、取消和测试。“测试”按钮使用字段中输入的设置发送电子邮件

在表单的JS中,我在单击“Test”时使用ajax调用,以便执行表单中的perl代码。“更新”和“取消”按钮的返回方式与表单提交时的返回方式相同。这样做的原因是,当发送测试电子邮件时,我不希望用户被带到返回的页面,而是保持表单上的值不变,这样,如果值是正确的,用户就不必在想要更新实际值(更新我数据库中的值)时重新输入它们。显然,由于表单没有被“提交”,因此它在这个“测试”中尝试使用的值是页面打开时加载到表单中的值——它没有使用用户在点击测试按钮之前输入的值。有没有办法做到这一点

长问题短:使用CGI::FormBuilder,我可以通过PERL获得当前字段中的值而不提交页面吗?谢谢

简短回答:是的

中等回答:是的。您可以在页面中使用javascript将信息发送到服务器端应用程序

长答覆:

您似乎对服务器端和客户端代码如何与网页交互有些困惑。这很常见。许多人期望他们的服务是呈现页面和生成页面的程序之间的某种通信。AJAX和相关技术模糊了这里的界限,使事情变得更加混乱

下面是一个简单的老式CGI表单的时间轴:

  • 客户端请求页面。服务器接收页面请求。服务器调度 到CGI脚本
  • 服务器执行CGI脚本
  • 服务器将CGI脚本的结果发送给客户端
  • 客户端呈现脚本结果
  • 用户填写表格
  • 用户单击“提交”。带有参数信息的客户端请求页面(详细信息因请求类型、表单配置而异)。'
  • 服务器接收页面请求
  • 服务器分派给CGI脚本
  • 服务器执行CGI脚本。服务器将CGI脚本的结果发送给客户端。 客户端呈现脚本结果
来自客户端的每条消息都是单独处理的

AJAX允许您向服务器发送消息并获得响应,而无需清除当前加载的页面


因此,只需在html中加入一些javascript代码,并设置一个onModify处理程序,该处理程序将发出AJAX请求并将数据传递回服务器。AJAX请求只是另一个HTTP请求,就像上面的请求一样,但它在后台运行。您所需要做的就是捕获提交的数据并作出响应。您的javascript需要捕获响应并对其进行处理。

简短问题的答案是“否”

对这个长问题的回答是“是”

您只需要有两个“提交”按钮:“提交”和“测试”。
submit by Test将表单发送到CGI,CGI将只验证字段的值,并在字段中出现错误时返回具有相同值的相同表单和消息。

表单中没有Perl代码。如果您使用“测试”按钮进行AJAX调用,它将转到其他脚本,然后该脚本将被执行。这可能与生成表单的程序相同(因为CGI::FormBuilder允许您访问提交的值)。您需要显示一些重现问题的代码,因为很难理解问题是什么。它可以归结为您的“更新”按钮不是
submit
类型。但它可能完全是另一回事。所以,请展示一些代码。