我有一段非常简单的脚本可以更改 MySql 数据库中项目的状态 - 它在 IE7 中工作正常,但如果我在 Firefox 中尝试它,它看起来像工作,但没有......这非常奇怪。
代码非常简单——首先我得到我要查找的记录的详细信息:
<cfscript>
// Get the Product Attribute details
Arguments.qGetProductAttribute = Application.cfcProducts.getProductAttributes(Arguments.iProductAttributeID);
</cfscript>
这工作正常,如果我转储结果,它只是预期的记录内容。因此,我使用 if 语句将“事件”字段从 1 更改为 0,反之亦然。
<!--- If Product Attribute is active, mark as inactive --->
<cfif Arguments.qGetProductAttribute.bActive EQ 0>
<cfquery name="qChangeStatus" datasource="#Request.sDSN#">
UPDATE tblProductAttributes
SET bActive = <cfqueryparam value="1" cfsqltype="CF_SQL_INTEGER" maxlength="1" />
WHERE iProductAttributeID = <cfqueryparam value="#Arguments.iProductAttributeID#" cfsqltype="CF_SQL_INTEGER" />;
</cfquery>
<!--- Else if Product Attribute is inactive, mark as active --->
<cfelseif Arguments.qGetProductAttribute.bActive EQ 1>
<cfquery name="qChangeStatus" datasource="#Request.sDSN#">
UPDATE tblProductAttributes
SET bActive = <cfqueryparam value="0" cfsqltype="CF_SQL_INTEGER" maxlength="1" />
WHERE iProductAttributeID = <cfqueryparam value="#Arguments.iProductAttributeID#" cfsqltype="CF_SQL_INTEGER" />;
</cfquery>
</cfif>
我看不出有任何原因导致它不起作用......事实上,在 IE7 中它完美地工作......
运行此脚本后,浏览器将返回到显示所有这些记录的页面。对于每条记录,如果“bActive”字段设置为“1”,它将显示“Active”一词,如果设置为“0”,它将显示“Disabled”。 很简单。
如果我运行脚本来禁用记录,Firefox 实际上会按预期显示“禁用”一词,但数据库记录不会更改!
我不知所措...服务器端代码如何在一个浏览器中正常工作而在另一个浏览器中却不能正常工作?!
最佳答案
您是否 100% 确定数据库记录不会更改?如果 firefox 两次调用您的脚本,您可能会受到这种影响,一次在页面呈现之前,一次在呈现之后。
所以产品被设置为禁用,然后在页面被发送到浏览器后再次更新(并且因为它已经被禁用,所以它被重新启用)。
如果您已将最后更新字段添加到数据库并在每次修改产品时更新该字段,那么您将能够判断是否属于这种情况。
编辑:回应下面的评论,一个快速+肮脏的修复是首先检查最后更新时间戳,如果它在当前时间的 n 秒内关闭更新。
你的firefox有没有什么插件可以重新调用页面?也许出于开发目的?一个简单的测试来查看它是您的脚本还是 firefox 中的一个怪癖是将您的 get url 更改为带有 post 方法的表单,因为浏览器/插件不应重新调用 post 请求。
关于mysql - 简单的 ColdFusion 脚本在 IE 中有效但在 Firefox 中无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/138607/