以编程方式触发Coldfusion中的事件

时间:2015-01-26 18:38:00

标签: javascript html coldfusion

我有一个提交到Coldfusion页面的html / javascript页面,它消耗数据(将数据写入数据库),当Coldfusion页面完成后,我希望它重新提交回原来的html / javascript页面。简而言之,我希望以编程方式触发Coldfusion页面触发提交事件。我该怎么做呢?注意:我不能使用Ajax,因为我们的环境不允许跨站点脚本。

HTML / JS(MainForm.html):

<form name="myForm" action="processStuff.cfm">
    <input type="submit" name="btnSubmit">
</form>

CF:

<cfif IsDefined("Form.btnSubmit")>
  . . . Do a bunch of stuff, then submit back to MainForm.html . . . 
</cfif>

4 个答案:

答案 0 :(得分:4)

也许你想要的是重定向回到表单?如果是这样,请使用cflocation

<cfif isDefined("form.btnSubmit")>
  . . . Do a bunch of stuff, then submit back to MainForm.html . . .
  <cflocation url="MainForm.html" />
</cfif>

答案 1 :(得分:3)

这完全取决于您的代码。你在使用框架吗?你在使用CFC吗?您使用的是纯粹的程序代码吗?等

但为了简单起见,我们假设您正在编写程序代码并将模型和视图合并在一起。

只需在用于显示表单的同一.CFM文件上添加条件逻辑。然后您的表单将返回到同一页面。

<强> myForm.cfm页面

<html><body>
<cfif structKeyExists(form, "btnSubmit")>
    <cfquery>
        INSERT INTO formResults(name)
        VALUES(<cfqueryparam value="#form.name#" cfsqltype="CF_SQL_VARCHAR">)
    </cfquery>
</cfif>

<form method="POST">
    Name: <input type="text" name="name">
    <input type="submit" name="btnSubmit">
</form>
</body></html>

答案 2 :(得分:1)

在常规冷融合页面中,以这种方式设置。

<强> form.cfm

<cfif isDefined("form.submitb") and form.submitb is "yes">
  ... submit form
<cfelse>
  ... show form ...
</cfif>

你可以这样做

<强> otherpage.cfm

<cfset form.submitb = "yes" />
<cfset form.firstname = "John" />
<cfset form.lastname = "Doe" />
<cfinclude template="form.cfm">

如果你使用的是最新版本的CF / Railo,你可以......

<cfset StructAppend(form, {submitb = "yes", firstname = "John", lastname = "Doe"}, false) />

其中false是OverWriteFlag的值,它指定在发生冲突时第二个结构的值是否会覆盖第一个结构的值。

请注意,我们没有将StructAppend的值分配给<cfset form = StructAppend{....}>之类的变量。这样做会将表单的值设置为true,这样会很糟糕。其他一些功能如ArrayAppend()也以同样的方式工作。

我们也可以说

<cfset form = {....}>

但您可能不想删除和覆盖otherpage.cfm的表单数据。

最后,在提交表单时,Cold Fusion会生成一个名为form.fieldnames的字段,其中包含表单中所有表单元素的字段名称。以编程方式添加到表单范围时,生成

<cfset form.newfield = "test" />newfield添加到表单范围,但不会将newfield添加到form.fieldnames列表中。解决方法是(如果需要)

<cfset ffnames = StructKeyList(form) />
<cfif listfind(ffnames,"fieldnames") />
  <cfset ffnames = ListDeleteAt(ffnames,ListFind(ffnames,"fieldnames")) />
</cfif>

答案 3 :(得分:0)

有很多方法可以做到这一点。我喜欢根据行为是get还是post来分离行为。

<cfif cgi.request_method EQ "post">
    <cfquery>
       INSERT INTO formResults(name)
       VALUES(<cfqueryparam value="#form.name#" cfsqltype="CF_SQL_VARCHAR">)
    </cfquery>
</cfif>

<form method="POST">
   Name: <input type="text" name="name">
   <input type="submit">
</form>
相关问题