我应该如何使用ajax帖子将变量发送到coldfusion操作页面?

时间:2013-09-13 16:17:31

标签: jquery ajax coldfusion

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

2 个答案:

答案 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错误”等。