我的页面从页面上的cfquery生成随机变量,用作随机奖品和赢得奖品的随机员工。
<cfset prizeID="#prize.prize_ID[variables.prizeRow]#">
然后我在页面上有一个cfform,我将文本输入设置为这些变量,并使用以下代码将其提交到服务器操作页面,数据库更新我的表格,表明要求获奖:
function submitClaim() {
ColdFusion.Ajax.submitForm('claimyourprize', 'claim.cfm');
}
我正在尝试寻找替代方法,我使用Ajax将变量(prizeID,winnerID等)发送到服务器。
这就像我得到的那样接近:
function Claim() {
$.ajax({
type: "POST",
url: "claim.cfm",
data: { claimedPrize: "#prizeID#", claimedEmployee: "#employeeID#"}
}).done(function( ) {
alert( "claimed" );
})
}
目前我正在点击按钮上的功能点击“声明”奖品。
以下是我的claim.cfm上的一个查询:
<cfquery name="updateQuantity" datasource="christmas">
UPDATE PRIZES
SET QUANTITY = QUANTITY - 1
WHERE prize_ID = [ID sent from the client needs to go here]
</cfquery>
答案 0 :(得分:2)
您正在向claim.cfm页面提交表单。在claim.cfm页面上,您将拥有表单范围。我建议你添加一些回复,这样你就可以在客户端获得某种结果。
function Claim() {
$.ajax({
type: "POST",
url: "claim.cfm",
data: { claimedPrize: "#prizeID#", claimedEmployee: "#employeeID#"}
}).done(function(returnresult) {
alert( returnresult );
})
}
这将是claim.cfm页面
<cfif isDefined("form.claimedPrize")>
<cfquery name="updateQuantity" datasource="christmas">
UPDATE PRIZES
SET QUANTITY = QUANTITY - 1
WHERE prize_ID = <cfqueryparam value="#form.claimedPrize#" cfsqltype="CF_SQL_INTEGER" />
</cfquery>
SUCCESS!
<cfelse>
SOMETHING WENT WRONG!
</cfif>
但更好的解决方案是使用cfc(组件)unstead cfm(模板)并将表单提交到cffunction。
claim.cfc文件:
<cfcomponent displayName="My claim Component">
<cffunction name="claim" output="false" access="remote" returntype="string">
<cfargument name="claimedPrize" required="true" type="numeric"/>
<cfargument name="claimedEmployee" required="true" type="numeric"/>
<cfquery name="updateQuantity" datasource="christmas">
UPDATE PRIZES
SET QUANTITY = QUANTITY - 1
WHERE prize_ID = <cfqueryparam value="#arguments.claimedPrize#" cfsqltype="CF_SQL_INTEGER" />
</cfquery>
<cfreturn "OK" />
</cffunction>
</cfcomponent>
然后ajax调用看起来像这样:
function Claim() {
$.ajax({
type: "POST",
url: "claim.cfc?method=claim",
data: { claimedPrize: "#prizeID#", claimedEmployee: "#employeeID#"}
}).done(function(returnresult) {
alert( returnresult );
})
}
答案 1 :(得分:0)
你的问题是否像这一样简单:
WHERE prize_ID = [ID sent from the client needs to go here]
在这种情况下,当您使用AJAX进行POST时,使用AJAX请求发送的数据将作为表单字段传递并最终位于“FORM”范围内,因此您需要将该代码更改为沿着这条线:
WHERE prize_ID = <cfqueryparam value="#form.claimedPrize#" cfsqltype="CF_SQL_INTEGER">
(我猜它是一个整数)
但你真的不清楚你的具体问题是什么。不是您要完成的任务,而是特定的问题正在完成任务。
喜欢“表单范围没有填充”,或“claim.cfm
永远不会被调用”或“我收到JS错误”等。