2010年8月30日 星期一

conn.execute 一次執行兩次

到新公司上班一個多月了,很努力的修改原先網站的bugs,大部分都算是順利的暫時性解決(實在是滿亂的程式碼,只能先解決先前問題),但是,卻遇到一個讓我頭很大的問題,bug怎麼樣都找不到...每次送出訂單之後,會出現錯誤畫面,說主索引鍵不可重複....





我原先懷疑是表單重複執行兩次,可是程式碼似乎沒問題,而且時好時壞,完全找不到規則性,於是我從ASP語法開始下手,似乎沒問題,又從SQL SERVER找問題,還是沒有,到最後發現只有IE會出現這樣的問題,Google瀏覽器很正常,Firefox不能跑先前工程師寫的javascript表單按鈕,所以無法測,乾脆就叫所有客戶換瀏覽器吧!



就這樣...找問題找了一個星期,還懷疑到Https會弄丟session的問題,然後又錯怪IIS,又找許多Session弄丟的問題...今天晚上,我終於看到某一篇網誌...突然恍然大悟....~_~

真的是表單送出了兩次...~_~

先看看input的寫法

原先A網頁:
<INPUT type=image SRC="../images/shopping-icon5.gif" WIDTH="88" HEIGHT="18" BORDER="0" align=absmiddle onClick="CheckFormData();">

原先的B網頁的Javascript驗證,最後面的程式碼:
var FormUrl="next.asp";
formA.hidDec.value="LType";
formA.method="post";
formA.action="<'%=application("sslWebUrl")%>"+"/Shopping/"+FormUrl;
document.formA.submit();

以上是原先工程師寫的語法,眼尖的你是否發現問題了?

這段程式碼我看了無數次,唉唉...資值駑鈍呀....



原來是input image本來就可以當submit,所以在Javascript語法中不用加上submit....所以只要改成以下寫法(參考後的寫法)

A的form開頭:
<FORM NAME="formA" id="formA" method="post" action="<%=application("sslWebUrl")%>/Shopping/next.asp">

A的input image寫法
<INPUT type=image SRC="../images/shopping-icon5.gif" WIDTH="88" HEIGHT="18" BORDER="0" align=absmiddle onClick="return CheckFormData();">

B中最後的javascript中,我把原先的傳送表單的語法,都改寫在form,只要判斷驗證後的表單是否正確就好

如果也有遇到類似問題的朋友,希望這篇有幫上忙..^_^

參考網址 http://www.jaceju.net/blog/?p=88

沒有留言: