12 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊
提交訂單就保存到系統(tǒng),然后查出訂單顯示詳情,下面顯示確認(rèn)按鈕,確認(rèn)后顯示去支付的頁(yè)面
這樣直接從設(shè)計(jì)角度防止重復(fù)提交,就算提交訂單那一步重復(fù)了,確認(rèn)的訂單絕對(duì)是存在的
PS: 不建議直接修改按鈕disable狀態(tài), 因?yàn)橛行r(shí)候莫名還是能點(diǎn)的。
最好直接顯示一個(gè)層,禁止事件冒泡, 層遮住整個(gè)頁(yè)面。 和禁用狀態(tài)一起用更保險(xiǎn)

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
我的訂單處理方式都是和驗(yàn)證碼一個(gè)道理,以jquery+ajax+php提交為例;
前端:發(fā)起請(qǐng)求,附上提交頁(yè)的一次性token, 點(diǎn)擊之前判斷特征比如data('id',1)的時(shí)候,存在則說(shuō)明正在請(qǐng)求中,禁止請(qǐng)求.
后端:收到新訂單的時(shí)候驗(yàn)證token并將訂單表鎖行,直到回調(diào)給前端時(shí)釋放.
這樣你無(wú)論在瞬間請(qǐng)求多少次,我后端只處理一次.
重要的一點(diǎn)是無(wú)論后端加強(qiáng)邏輯,而不是前端下功夫,如果不慎重復(fù)點(diǎn)擊就能造成提交重復(fù),肯定是后端邏輯有問(wèn)題.前端不過(guò)是用戶操作的一個(gè)展示.

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊
我現(xiàn)在的平臺(tái)也有此類的問(wèn)題,一般都是用戶點(diǎn)擊的時(shí)候重復(fù),瞬間的事情,很難鑒定的,我現(xiàn)在用的最簡(jiǎn)單粗暴,只要提交了,就按鈕灰掉或者跳轉(zhuǎn),不等到服務(wù)器給出反饋。希望你有好的方案后能分享下。

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊
1、前端去禁止重復(fù)點(diǎn)擊。2、后端對(duì)業(yè)務(wù)處理,發(fā)現(xiàn)重復(fù)的訂單,禁止入表

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個(gè)贊
這個(gè)問(wèn)題不要通過(guò)純前端的方式去解決吧!看數(shù)據(jù)庫(kù)里面的記錄基本都是同時(shí)提交的,題主也說(shuō)公司N多人一次測(cè)試也未能重現(xiàn)。
解決方案:讓請(qǐng)求“冪等”。 簡(jiǎn)單來(lái)說(shuō)在付款的頁(yè)面提前獲得一個(gè)下單的token,每個(gè)token只能提交一次訂單,以同樣的token創(chuàng)建訂單不會(huì)成功。

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊
最后的解決辦法是,
- 前端限制
前端的按鈕需要一點(diǎn)就改變,我用的是替換為另一個(gè)沒有點(diǎn)擊事件的按鈕防止再點(diǎn)擊。
2.后端限制
匹配查詢上一張間隔是否相差15秒內(nèi),如果15秒內(nèi)禁止重復(fù)提交訂單。有效防止短時(shí)間內(nèi)多單提交。
- 12 回答
- 0 關(guān)注
- 1674 瀏覽
添加回答
舉報(bào)