【问题标题】:How should I send variables to a coldfusion action page with ajax post?我应该如何将变量发送到带有 ajax 帖子的冷融合操作页面?
【发布时间】:2013-09-18 09:51:15
【问题描述】:

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

【问题讨论】:

  • 您的问题有点令人困惑,因为您正在混合客户端 (AJAX) 和服务器端 () 术语,好像它们以某种方式相关或可以交互。 #thisSpin.spinnumber#、#prizeID# 和 #employeeID# 来自哪里?发布后你在服务器上返回什么?您能否编辑代码以包含这些内容的来源,并明确什么是客户端代码和什么是服务器端代码(这是为了帮助您了解您在做什么)
  • 我使用 cfset 将我的员工/奖品变量设置为 cfquery 中的随机行。这都是在客户端页面 (index.cfm) 上触发的。我更新了原始帖子以获得更多详细信息。
  • 感谢您更新您的问题。我认为如果您放弃“页面”的概念而考虑“CFML 代码”和“Javascript 代码”可能会有所帮助,因为虽然两者可能驻留在同一个 file 中,但它们不会被执行同时。阅读本文可能会有所帮助:cfmlblog.adamcameron.me/2012/10/…。当您致电Claim() 时,您没有回答我关于实际发生的情况 的问题。您的问题实际上并没有真正说明问题所在。我知道它不会做“你想要的”,而是哪一部分?
  • 目前,当我调用 claim() 时,claim.cfm 操作页面成功获取 cfform 数据并执行查询以更新奖品数量并记录赢得所述奖品的员工,但我想在 ajax/jquery 中执行此操作,减少对 cfform 和 Coldfusion.Ajax 的依赖。我会看看你的博客,ty。

标签: jquery ajax coldfusion


【解决方案1】:

你的问题就这么简单吗:

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

【讨论】:

    【解决方案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(组件)而不是 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 );
        })
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-05
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多