简单的ColdFusion脚本可以在IE中使用,但不能在Firefox中使用?

时间:2020-03-06 14:46:35  来源:igfitidea点击:

我有一个非常简单的脚本,它可以更改MySql数据库中项目的状态,该项目在IE7中可以正常工作,但是如果我在Firefox中尝试它,看起来就可以了,但是却没有...这很奇怪。

首先,代码很简单,我得到了要查找的记录的详细信息:

<cfscript>
// Get the Product Attribute details
Arguments.qGetProductAttribute = Application.cfcProducts.getProductAttributes(Arguments.iProductAttributeID);
</cfscript>

这很好,如果我转储结果,那只是记录中的内容。因此,然后我使用if语句将"活动"字段从1更改为零,反之亦然。

<!--- 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实际上会按预期显示单词" disabled",但数据库记录不会改变!

我很茫然...服务器端代码如何在一个浏览器中正常运行而在另一个浏览器中却无法正常运行?!

解决方案

我们是否100%确定数据库记录没有更改?如果firefox两次调用脚本(一次在呈现页面之前,一次在页面之后),我们可能会受到这种影响。

因此,将产品设置为禁用,然后在将页面发送到浏览器后再次对其进行更新(并且由于它已经被禁用,因此将其重新启用)。

如果我们在数据库中添加了"最后更新"字段,并在每次修改产品时进行更新,则可以确定是否是这种情况。

编辑:响应下面的评论,一个快速的+肮脏的修复将是首先检查最后的更新时间戳,如果它在当前时间的n秒内关闭了该更新。

我们在firefox中是否有任何可以重新调用该页面的插件?也许出于开发目的?一个简单的测试,看看它是脚本还是firefox中的一个怪癖,是使用post方法将获取的url更改为表单,因为浏览器/插件不应重新调用post请求。

尝试在SQL代码中WHERE子句的末尾删除分号。

WHERE   iProductAttributeID = <cfqueryparam value="#Arguments.iProductAttributeID#" cfsqltype="CF_SQL_INTEGER" />;

这可能是浏览器缓存问题。所使用的浏览器绝对不会影响直接的CF代码。如果刷新显示产品的页面会怎样?我们还需要直接查看数据库以查看该值是否正在更改。

稍微切一点,我们可以通过一些简单的数学就根本不需要if语句。

<cfquery name="qChangeStatus" datasource="#Request.sDSN#">
    UPDATE  tblProductAttributes
    SET
         bActive = <cfqueryparam value="#val(1 - Arguments.qGetProductAttribute.bActive)#" cfsqltype="CF_SQL_INTEGER" maxlength="1" />
    WHERE   
        iProductAttributeID = <cfqueryparam value="#Arguments.iProductAttributeID#" cfsqltype="CF_SQL_INTEGER" />;
</cfquery>

我们发布的代码不是导致错误的原因,因为它是所有服务器端代码,客户端上没有任何反应。

我将打开CF调试(包括数据库活动),并将标签粘贴在结束标记之后,重定向到产品视图页面之前。运行代码,然后查看SQL调试输出。

我的猜测是,使用Firefox时,包含查询的代码块不会被调用。

我找到了问题的原因... Firebug。

我丝毫不了解Firebug的想法,如果我从脚本中删除" cflocation"标记(将用户带回到摘要页面的标记),那么它可以正常工作。但是,如果我保留它,Firebug似乎会在将浏览器转发到摘要页面之前再次运行该功能。

没有理由这样做。
难以忍受的血腥。

至少在客户的计算机上不会发生这种情况。

所有这些不同的答案,但没有一个对我有用。我不得不去另一个论坛,那里有人说这是Firefox中的Skype扩展插件,它使ColdFusion数据库发疯或者无法正常工作。我卸载了Skype扩展程序(谢谢,Skype),一切恢复正常。希望这也适用于其他人。