如何将onclick参数传递给CFC以通过AJAX更新数据库?

时间:2010-10-07 19:22:33

标签: ajax coldfusion coldfusion-8 cfc

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

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

  • (882票)
  • (163票)

当访问者投票时,应该使用投票更新数据库并将选民记录在不同的表中(因此他们不能再投票)。最后,将显示一条确认消息,其中包含新的投票计数:

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

现在我已经完成了所有工作,但更新了数据库。我尝试通过添加($.ajax)并在ajax部分中移动响应消息来重新编写JavaScript(AJAX)来调用CFC。但是,现在它根本不起作用。我做错了什么?

以下是我提出的新代码。为了简化这个问题,我只是展示了“No”投票部分。我是在正确的轨道上吗?这看起来很简单。

投票链接

<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>

1 个答案:

答案 0 :(得分:0)

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

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

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

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