2008-09-26 235 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),一切恢復正常。希望這也適用於其他人。

相關問題