2008-09-26 168 views
4

我有一个非常简单的脚本来改变MySql数据库中的项目的状态 - 它在IE7中工作正常,但如果我在Firefox中尝试它,它看起来像它的工作,但没有...是非常奇怪的。简单的ColdFusion脚本适用于IE,但不适用于Firefox?

的代码非常简单 - 首先我得到的纪录我在寻找的细节:

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

这是工作的罚款,如果我倾倒的结果,这是纪录的只是内容预期。那么我使用if语句将“活动”字段从一个更改为零,反之亦然。

<!--- 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',如果它设置为'zero',它将显示'Disabled'。 够简单。

如果我运行脚本来禁用记录,Firefox实际上会按照预期显示单词'disabled',但数据库记录不会改变!

我很茫然......服务器端代码如何在一个浏览器中正常工作,而不是在另一个浏览器中工作?

回答

3

我发现问题的原因... Firebug。

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

没有理由这样做。 不流血的。

至少它不会发生在客户的机器上。

3

您是否100%确定数据库记录没有更改?如果firefox在页面呈现之前和之后一次调用脚本两次,则可能会产生这种影响。

因此,该产品被设置为禁用,然后页面发送到浏览器后再次更新(因为它已被禁用,它被重新启用)。

如果您已将最新更新字段添加到数据库中,并且每次修改产品时都会进行更新,那么您将能够确定是否属于这种情况。

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

你有没有在Firefox中的任何插件可能重新调用页面?也许是为了开发目的?一个简单的测试,看看它的脚本或在Firefox中的怪癖是要改变你的网址到一个表单的方式,因为浏览器/插件不应该重新调用一个post请求。

+0

正确的你是......我添加了最后更新的字段,它确实做了一个改变......但我不知道FF击中脚本两次,并不明白为什么它会......任何想法如何阻止这种情况发生? – 2008-09-26 10:48:11

+0

我在FF中看到了一个模糊的问题,当它在一个它无法识别的字符上绊倒时,需要在不同的字符集中重新显示该页面,并且将重新提交该页面以执行此操作。您没有任何奇怪的字符与您所声明的文档类型差异很大? – ConroyP 2008-09-26 10:58:18

+0

Hmmmmmmmmmm .....不是我知道的......我在结果页面上使用了£符号,这在过去我遇到了问题......但不是在实际制作数据库的页面上电话...即使重新显示结果页面,也不应该导致问题。 – 2008-09-26 11:18:49

0

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

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

这可能是浏览器缓存问题。使用浏览器不会影响直接的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> 
2

你已经发布的代码是不是错误的原因,因为它是所有服务器端代码 - 有没有在那里的客户端上发生的事情。

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

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

0

所有这些不同的答案,都没有为我工作。我不得不去另一个有人说它是Firefox的扩展插件的论坛,这会导致ColdFusion数据库变得疯狂或不起作用。我卸载了Skype分机(谢谢你,Skype),一切恢复正常。希望这也适用于其他人。

相关问题