';意外';从javascript事件处理程序调用ColdFusion代码(服务器端代码)时的行为

';意外';从javascript事件处理程序调用ColdFusion代码(服务器端代码)时的行为,javascript,html,coldfusion,yui,Javascript,Html,Coldfusion,Yui,我有一个简单的YUI对话框,有两个按钮-接受和拒绝。我想在单击每个按钮时,将ColdFusion代码与JavaScript代码一起调用。当我将CF代码和JS代码一起引入时,不幸的是,每个函数中都会触发CF代码 所有代码如下所示: <script type="text/javascript"> function displayForm() { YAHOO.namespace("example.container"); if (!YAHOO.exampl

我有一个简单的YUI对话框,有两个按钮-接受和拒绝。我想在单击每个按钮时,将ColdFusion代码与JavaScript代码一起调用。当我将CF代码和JS代码一起引入时,不幸的是,每个函数中都会触发CF代码

所有代码如下所示:

<script type="text/javascript"> 

function displayForm() {
   YAHOO.namespace("example.container");    
        if (!YAHOO.example.container.Form) {        
            YAHOO.example.container.Form = new          
                           YAHOO.widget.SimpleDialog("Form", {
                modal: true,
                icon: YAHOO.widget.SimpleDialog.ICON_WARN,
                visible: false,
                fixedcenter: true,
                constraintoviewport: true,
                width: "500px",
                role: "alertdialog",
                draggable: false, 
                buttons: [ { text:"Accept", handler:handleAccept, isDefault:true }, { text:"Decline", handler:handleDecline} ]
            });             
            YAHOO.example.container.Form.setHeader("Info");         
                    YAHOO.example.container.Form.setBody("Body");   
            YAHOO.example.container.Form.render(document.body);
        }           
        YAHOO.example.container.Form.show();            
   }        


   function handleAccept() {
       this.cancel();
       <CFQUERY name="UpdTable" datasource="test>
           UPDATE t 
           set a = '1'
           where b = '1'
       </CFQUERY>
   }

   function handleDecline() {
       this.cancel();        
       <CFQUERY name="UpdTable" datasource="test>
           UPDATE t 
           set a = '2'
           where b = '1'
       </CFQUERY>
   }

   displayForm();

</script>

函数displayForm(){
名称空间(“example.container”);
如果(!YAHOO.example.container.Form){
YAHOO.example.container.Form=新建
YAHOO.widget.SimpleDialog(“表单”{
莫代尔:是的,
图标:YAHOO.widget.SimpleDialog.icon\u警告,
可见:假,
fixedcenter:对,
约束视口:对,
宽度:“500px”,
角色:“alertdialog”,
可拖动:错误,
按钮:[{text:“Accept”,处理程序:handleacept,isDefault:true},{text:“decept”,处理程序:handledcline}]
});             
YAHOO.example.container.Form.setHeader(“Info”);
YAHOO.example.container.Form.setBody(“Body”);
YAHOO.example.container.Form.render(document.body);
}           
YAHOO.example.container.Form.show();
}        
函数handleAccept(){
这个。取消();
更新t
设置a='2'
式中b='1'
}
displayForm();
问题是当handleAcept()被自动触发时,handleDecline()CF代码被触发,因此我在数据库中的结果是a='2',而不是a='1'


是否有解决方法或简单的解决方案?理想情况下,我不想使用JS重定向。

在用户浏览器上呈现页面之前,服务器会对您的两个查询进行评估

将查询放在一个单独的模板中,并使用YUI代码运行适当的模板,而不是像现有的那样将查询内联


ColdFusion是一种服务器端语言,总是在用户看到任何东西之前运行。

在用户浏览器上呈现页面之前,服务器上会对您的两个查询进行评估

将查询放在一个单独的模板中,并使用YUI代码运行适当的模板,而不是像现有的那样将查询内联


ColdFusion是一种服务器端语言,总是在用户看到任何东西之前运行。

当浏览器请求页面时,会执行ColdFusion代码。也就是说,当代码发送到浏览器时,将执行两个coldfusion cfquery(因此每次有人使用上述代码查看页面时,都会执行这两个查询)。 这就是ColdFusion的工作原理:

  • 浏览器从Web服务器请求页面
  • Web服务器处理所有ColdFusion代码
  • Web服务器将结果文本发送到浏览器
  • 浏览器将文本解释为网页
  • 你的问题发生在4点。ColdFusion代码不再存在!(查看页面的源代码以查看)ColdFusion代码已在第2阶段处理完毕,未发送到浏览器

    那么你如何解决你的问题呢?因为ColdFusion处理发生在页面请求之后,所以您需要请求一个页面。因为您正在更改服务器上的数据,所以需要执行post,请参阅使用YUI连接管理器执行post的示例

    为了简单起见,有两个页面,一个请求接受,另一个请求拒绝。在页面中,只需执行相关的CFQUERY。现在,在handleAcept&handleRequest函数中,像上面的YUI连接管理器示例那样请求这些页面。例如

    var callback = 
    { 
        success: function(o){}, 
        failure: function(o){}, 
        argument: [] 
    };  
    var request = YAHOO.util.Connect.asyncRequest('POST', "accept.cfm", callback, "");
    

    ColdFusion代码在浏览器请求页面时执行。也就是说,当代码发送到浏览器时,将执行两个coldfusion cfquery(因此每次有人使用上述代码查看页面时,都会执行这两个查询)。 这就是ColdFusion的工作原理:

  • 浏览器从Web服务器请求页面
  • Web服务器处理所有ColdFusion代码
  • Web服务器将结果文本发送到浏览器
  • 浏览器将文本解释为网页
  • 你的问题发生在4点。ColdFusion代码不再存在!(查看页面的源代码以查看)ColdFusion代码已在第2阶段处理完毕,未发送到浏览器

    那么你如何解决你的问题呢?因为ColdFusion处理发生在页面请求之后,所以您需要请求一个页面。因为您正在更改服务器上的数据,所以需要执行post,请参阅使用YUI连接管理器执行post的示例

    为了简单起见,有两个页面,一个请求接受,另一个请求拒绝。在页面中,只需执行相关的CFQUERY。现在,在handleAcept&handleRequest函数中,像上面的YUI连接管理器示例那样请求这些页面。例如

    var callback = 
    { 
        success: function(o){}, 
        failure: function(o){}, 
        argument: [] 
    };  
    var request = YAHOO.util.Connect.asyncRequest('POST', "accept.cfm", callback, "");