首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cfajaxproxy / cfc数据库更新失败

cfajaxproxy / cfc数据库更新失败
EN

Stack Overflow用户
提问于 2010-10-08 23:48:52
回答 3查看 1K关注 0票数 0

现在,我所有的东西都在工作,但我的cfc并没有更新数据库。我试图更改cfc页面中的代码,但当我刷新页面以测试它时,只会出现错误。所以我知道这是在呼叫cfc页面。但是,当我单击该链接时,除了更新数据库之外,一切都正常工作。我做错什么了?

下面是我想出的代码。这只是一个“是”/“不”应用程序的“不投票”部分。让这个问题简单明了。我在正确的轨道上吗?这看起来应该很简单。

投票链路

代码语言:javascript
复制
<A HREF="javascript:()" onclick="VoteNoID('#IdeaID#');"><SPAN ID="VoteNoMessage">I Vote No</SPAN></A> - <SPAN ID="NewNoCount">#NoCount#</SPAN>

Ajax / cfajaxproxy

代码语言:javascript
复制
<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>

VoteNo.cfc

代码语言:javascript
复制
<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>    

编辑 Ok让每个人都更新。我删除了查询"MemberVote“(是的,它仍然在上面的代码中。我把它留给每个人看)只是为了避开错误,看看NewCount在添加cfc.NewCount(true)之后是如何工作的,就像橘子表建议的那样。我得到的是这个;它确实更新了数据库并显示了NewCount,就像它应该做的那样。但是1秒后,页面变成白色,我所拥有的就是显示在左上角的NewCount (没有其他的)。

Firebug什么也没有显示,我的意思是什么都没有(空白)。没有HTML,CSS,没有代码。不知怎么的,ajax刷新了,只显示了NewCount,页面的表现就像是在尝试记录什么。我是忘了添加什么东西来保持它的清爽,还是其他的东西?

我需要修复这个新问题,并让它将成员投票添加到"MemberVote“查询中的数据库中。有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2010-10-09 02:26:48

在没有看到实际错误的情况下,我猜您的问题是使用与函数相同的非作用域变量名。而不是把它放在参数标签后面。然后在后面的代码中使用countNew变量。

当您传入变量时,另一个thing...please,plesae,plesae在查询中使用cfqueryparam。这可以保护您免受sql注入攻击(并提高性能)。例如:

代码语言:javascript
复制
<CFQUERY NAME="NoCountCK" DATASOURCE="MyDSN">
SELECT *
FROM Ideas
WHERE IdeaID = <cfqueryparam value="#arguments.VoteNo#">
</CFQUERY>
票数 2
EN

Stack Overflow用户

发布于 2010-10-09 04:13:02

首先,我认为您永远不会在MyCFC组件中调用“MyCFC”函数。正如cfajaxproxy文档所演示的(3.html),您调用cfajaxproxy,初始化一个JavaScript对象,并对该对象调用一个方法。因此,在您的示例中,在“cfc.NewCount(GetDataResult)”之后应该是“cfc.setCallbackHandler(True)”(注意这是区分大小写的)。

接下来,要检查自己,请在火虫中使用火狐。这将允许您轻松地执行JavaScript错误和AJAX请求。在运行Firebug的情况下加载页面。检查Firebug控制台是否有JavaScript错误。如果它抱怨找不到库cfajax.js,那么您可能需要设置一个到CFIDE目录的web服务器映射-- ColdFusion保存它附带的各种JavaScript文件。

最后,单击“投票”按钮。检查Firebug中的AJAX请求,以查看是否启动了某些内容。看看响应代码是什么。不是200?在Firebug控制台中打开请求,查看响应HTML。您可以在新的浏览器选项卡中右键单击要打开的响应。

票数 0
EN

Stack Overflow用户

发布于 2010-10-10 17:35:18

好的,我通过替换以下方法修复了覆盖整个DOM的document.write:

代码语言:javascript
复制
    document.write(result) 

有了这个

代码语言:javascript
复制
    var content = document.getElementById('NewCount').innerHTML=result; 

这似乎保持了<SPAN ID=" NewCount'> </SPAN>中的更改,而不是覆盖我的页面。

我修正了为什么我的cfc不将成员投票到"MemberVote“查询中的数据库。我得到了一个“调用CFC错误:执行数据库查询错误”。我不得不把桌子上的一个字段重新贴上标签。由于某种原因,尽管cfc在cfc之外工作时无法工作,但是执行该表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3895034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档