我理解如何从HTML表单中提取JQuery中的数据属性,但是可以从传递表单的.cfc控制器中完成吗?
Page.cfm
<cfform action="controller.cfc" method="getData">
<cfinput name="uploadMyData" type="submit" data-primaryID="123">
</cfform>
Controller.cfc
function getData(rc){
writeDump(rc.uploadMyData.?????(primaryId)????);
}
不确定数据属性是否以任何方式存储在struct中。 我在rc.uploadMyData上尝试了一个getMetaData,但只获得了一个java函数列表。
更新
数据属性只是影响元素内部数据对象的标记。它们不是表单请求的一部分。您也不会将表单提交给CFC文件。使用Ajax,您可以从data属性中读取值,并将其作为请求数据包的一部分传递给服务器。
所以在 Page.cfm
<script type="text/javascript">
var otherData = $("#myForm").serialize();
function sendForm(){
var primaryID = $("#submitData").data("primaryID");
jQuery.post("urlpath/controller/",'{"id":'+''+primaryID+'}', function(dataReturn, status){
//I want to get my form and submit the other data as well to the controller
}
}
</script>
<form id="myForm" action="sendForm()">
<input name="uploadMyData" id="submitData" type="submit" data-primaryID="123">
<input name="importantThing" value="#importantVariable#" type="text">
</form>
将其作为请求数据包的一部分传递给服务器。
我怎么把它们一起传递? 我希望这个表单提交重定向到另一个页面,所以我不知道我怎么不能使用控制器?表单数据应该通过newPage.cfc来处理它并准备好在newPage.cfm上输出。我使用的是框架1,但这并没有太大的改变。
感谢您的帮助,您怎么看?
更新2
好的,现在我问自己为什么我要提交一份同时提交ajax和coldfusion表格的表格?我意识到这不是应该做的。我可以
Page.cfm
<script type="text/javascript">
var otherData = $("#myForm").serialize();
function sendForm(){
var primaryID = $("#submitData").data("primaryID");
jQuery.post("controller/method/?primaryId="+primaryID+"",otherData, function(dataReturn, status){
//do stuff with dataReturn or do a javascript redirect
}
}
</script>
Controller.cfc
function method(requestContext){
//do stuff with that otherData, all stored in request context. includes the primaryID value i appended to the url
//send it back to the Page.cfm
fw.renderData("rawjson",jsonString,200,"");
}
如果它恢复正常,我可以在原始视图中使用该信息运行一个函数。就像在页面上显示一样。
Page.cfm
<cfform action="controller.method" method="getData">
<cfinput name="uploadMyData" type="submit" value="Submit Form Button">
<cfinput name="primaryID" type="hidden" value="123">
</cfform>
Controller.cfc
function method(requestContext){
//do stuff with requestContext.primaryID
//go to the view method.cfm or do a fw.redirect("new page or back to the page i came from");
}
为什么我们要两次提交表格?只做一个或另一个。
答案 0 :(得分:1)
Matt,我认为你对HTML,JavaScript和jQuery非常基本的一些事情感到困惑,并且与ColdFusion无关。
让我们从HTML Form开始。
<form id="{{unique_dom_value}}" action="{{uri}}" method="{{http_verb}}">
GET
,但您最常使用POST
。您尝试在controller.cfc
中发布的URI,但除了将您重定向到ColdFusion CFC检查器之外,它不会执行任何操作。
在大多数MVC框架的上下文中,index.cfm?event=handler.action
使用底层框架在名为action
的CFC中调用名为handler
的函数。没有框架,您必须手动执行此操作。因此,如果您有一个名为controller.cfc
的CFC,并希望将表单数据发送到名为myFunction
的函数,则需要说action="controller.cfc?method=myFunction
。
但那也不对。提交表单时,浏览器希望加载action
属性中的URI。但是你的CFC函数不响应HTML,它会响应其他东西。也许是查询对象,也许是JSON。这就是为什么你要使用jQuery.Ajax()将表单数据(包括数据属性值)发送到CFC的函数,该函数应该以JSON格式返回数据。收到回复后,您可以继续在同一页面上处理或重定向到另一个页面。
但是,由于您使用的是Framework One,我会查看有关在您的一个处理函数中使用renderData()
的文档。