gpt4 book ai didi

javascript - 从 javascript 事件处理程序调用 ColdFusion 代码(服务器端代码)时出现“意外”行为

转载 作者:行者123 更新时间:2023-11-28 12:50:36 24 4
gpt4 key购买 nike

我有一个简单的 YUI 对话框,有 2 个按钮 - 接受和拒绝。我想在单击每个按钮时将 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>

问题是,当handleAccept()自动触发时,handleDecline() CF代码被触发,所以我最终在数据库中得到a = '2'而不是a = '1'。

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

最佳答案

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

  1. 浏览器向网络服务器请求页面
  2. 网络服务器处理所有 ColdFusion 代码
  3. 网络服务器将结果文本发送到浏览器
  4. 浏览器将文本解释为网页

您的问题出现在4处。ColdFusion代码不再存在! (查看页面源代码即可看到)ColdFusion 代码已经在第 2 阶段进行了处理,并且没有发送到浏览器。

那么你如何解决你的问题呢?嗯,由于 ColdFusion 处理发生在页面请求之后,因此您需要请求页面。因为您要更改服务器上的数据,所以您需要发布帖子,请参阅 http://developer.yahoo.com/yui/examples/connection/post.html有关使用 YUI 连接管理器进行发布的示例。

为了简单起见,有两页,一页用于请求接受,一页用于拒绝。在页面中,只需要做相关的CFQUERY即可。现在,在您的handleAccept和handleRequest函数中,请求这些页面,就像上面的YUI连接管理器示例一样。例如。

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

关于javascript - 从 javascript 事件处理程序调用 ColdFusion 代码(服务器端代码)时出现“意外”行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1501973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com