现在我一切正常,但我的 cfc 没有更新数据库。我尝试更改 cfc 页面中的代码,但是当我刷新页面进行测试时,这只会带来错误。所以我知道它正在调用 cfc 页面。但是当我单击链接时,除了更新数据库之外,一切正常。我做错了什么?
下面是我想出的代码。这只是 Yes/No Vote App 的 No Vote 部分。保持这个问题简单。我在正确的轨道上吗?这看起来应该很简单。
投票链接
<A HREF="javascript:()" onclick="VoteNoID('#IdeaID#');"><SPAN ID="VoteNoMessage">I Vote No</SPAN></A> - <SPAN ID="NewNoCount">#NoCount#</SPAN>
Ajax / cfajaxproxy
<cfajaxproxy cfc="CFC/MyCFC" jsclassname="MyCFC">
<script LANGUAGE="JavaScript">
function VoteNoID()
{
var VoteNoID = document.getElementById("VoteNoID");
var cfc = new MyCFC();
cfc.setCallbackHandler(getDataResult);
cfc.NewCount(true)
var VoteNoDescription = document.getElementById("VoteNoDescription").style.display='none';
$('#NewNoCount').html("");
$('#VoteNoMessage').html('You voted "No" with');
}
function getDataResult(result)
{
document.write(result);
}
</script>
投票号.cfc
<cfcomponent>
<cffunction name="NewCount" access="remote">
<cfargument name="VoteNo" 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="Member" DATASOURCE="MyDSN">
SELECT *
FROM Members
WHERE MemberID = 1
</CFQUERY>
<CFQUERY NAME="MemberVote" DATASOURCE="MyDSN">
INSERT INTO ComingSoonVote(CSID,MemberID,DatePosted,YesNo)
VALUES(#arguments.VoteNo#,#COOKIE.MemberID#,#NOW()#,N)
</CFQUERY>
<cfreturn NewCount>
</cffunction>
</cfcomponent>
编辑确定让每个人都了解最新情况。我删除了查询“MemberVote”(是的,它仍然在上面的代码中。我把它留在这里供大家查看)只是为了绕过错误,看看 NewCount 在添加之后是如何工作的,cfc.NewCount(true)
就像 orangepips 建议的那样。我得到的是这个;它确实更新了数据库并显示了 NewCount,就像它应该做的那样。但是 1 秒后,页面变白,我所拥有的只是显示在左上角的 NewCount(没有别的)。
Firebug 什么也没显示,我的意思是什么都没有(空白)。没有 HTML、CSS,根本没有代码。不知何故,ajax 刷新并且只显示 NewCount 并且页面的行为就像它试图加载一些东西一样。我是否忘记添加一些东西以防止它刷新或者是其他东西?
我需要解决这个新问题并让它在“MemberVote”查询中将成员投票添加到数据库中。有任何想法吗?