3

我的页面从页面上的 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>
4

2 回答 2

5

您正在将表单提交到 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(组件)代替cfm(模板)并将表单提交给cffunction。

声明.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 );
    })
}
于 2013-09-14T01:06:38.687 回答
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 错误”等。

于 2013-09-13T19:07:11.707 回答