【问题标题】:How do I pass an onclick argument to a CFC to update the database through AJAX?如何将 onclick 参数传递给 CFC 以通过 AJAX 更新数据库?
【发布时间】:2010-10-07 19:22:32
【问题描述】:

Ajax 新手。只是尝试做一个简单的 ajax/cfc 投票是/否应用程序。不能让它工作

我想要完成的是一个简单的“是或否”投票应用程序,它会显示每个链接旁边的投票数。例如:

  • 是的 (882 票)
  • (163 票)

当访问者投票时,数据库应该更新投票并将投票者记录在不同的表中(这样他们就不能再次投票)。最后,会显示一条带有新投票计数的确认消息:

  • 您投了 “是” (883 票)
  • 您投了 (164 票)

现在除了更新数据库外,我一切正常。我尝试通过添加 ($.ajax) 并在 ajax 部分中移动响应消息来修改 JavaScript (AJAX) 以调用 CFC。但是,现在它根本不起作用。我做错了什么?

下面是我想出的新代码。为了使这个问题简单,我只显示“否”投票部分。我在正确的轨道上吗?这看起来很简单。

投票链接

<A HREF="javascript:()" onclick="VoteNoID('#IdeaID#');">
   <SPAN ID="VoteNoMessage">No</SPAN>
</A> 
- <SPAN ID="NewNoCount">#NoCount#</SPAN>

Ajax

<script  LANGUAGE="JavaScript">  
   function VoteNoID()  
    {  
     var VoteNoDescription = document.getElementById("VoteNoDescription").style.display='none';  
            $.ajax({   
                type: "POST",   
                url: "../CFC/VoteNo.cfc?method=VoteNoID",   
                data: recordata,   
                dataType: "html",   
                success: function(message) {   
                    $('#VoteNoMessage').html("you voted No");  
                    $('#NewNoCount').html("#NewCount#");  
                    }   
                });   
            });   
        } `     
<script>



VoteNo.cfc

<cffunction name="NoVote" access="remote" returntype="string" 
    <cfargument name="VoteNo" type="string" required="yes">
    <CFQUERY NAME="NoCountCK" DATASOURCE="MyDSN">
        SELECT  *
        FROM    Ideas
        WHERE   IdeaID = #arguments.VoteNo#
    </CFQUERY>
    <CFSET NewCount=#NoCountCK.NoCount#+1>
    <CFQUERY NAME="UpdateNoCount" DATASOURCE="MyDSN">
        UPDATE  Ideas
        SET     NoCount = #NewCount#
        WHERE   IdeaID = #arguments.VoteNo#
    </CFQUERY>
    <CFQUERY NAME="MemberVote" DATASOURCE="MyDSN">
        INSERT INTO MemberVoteRecord(IdeaID,MemberID,DatePosted,YesNo)
        VALUES(#arguments.VoteNo#,#COOKIE.Member_ID#,#NOW()#,N)
    </CFQUERY>
    <cfreturn NewCount>
</cffunction>

【问题讨论】:

  • 什么不起作用?请帮助我们为您提供帮助。
  • 基本上它不会更新数据库或将 3 条消息传回以更改投票状态。旧代码至少会更新消息并关闭描述。显示已投票,但未更新数据库。

标签: ajax coldfusion coldfusion-8 cfc


【解决方案1】:

.ajax() 调用的成功部分只是将 html 设置为变量#newcount#。我不确定该变量最初是在哪里设置的,但是如果您查看生成的原始 html,您会看到原始 html 在此处包含一个静态数字。您需要将其设置为 javascript 变量,而不是 ColdFusion 变量。

因此,尝试将此变量设置为 message,这是传递给您的成功回调的参数。消息应该等于您的 CFC 返回的任何内容。 IE。如果您直接在浏览器中调用 CFC,这就是您的浏览器将呈现的内容。

success: function(message) {   
        $('#VoteNoMessage').html("you voted No");  
            $('#NewNoCount').html(**message**);  
           }   

此外,您还需要将 CFC 函数的返回格式调整为“普通”。 .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-14
    • 2016-08-10
    • 1970-01-01
    • 2023-01-18
    • 2012-09-04
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多