我有一个提交到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>
答案 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>