2016-01-23 51 views
0

使用AJAX來提交訂單:如何從停止停止ESC鍵重定向

  1. 用戶填寫表單並點擊提交
  2. 禁用提交按鈕,從多次點擊
  3. 彈出模態通知記住這正在提交訂單
  4. 的提交通過AJAX
  5. 一旦成功形成,重定向到訂單確認頁面
  6. 如果不成功,解釋原因,隱藏模式,重新激活提交...等。

問題是,當他們點擊提交,如果他們再單擊ESC鍵,它可以阻止重定向,然後在頁面只是停留在即使爲了在技術上已經經歷懸而未決。

問:

我怎能使用Esc鍵停止我的用戶重定向?

我不認爲用戶會甚至知道他們在做什麼,但就我而言,訂單已經被處理。擊中逃跑只是讓他們看不到他們的確認頁面,可能使他們認爲訂單沒有通過。

是否有另一種/更好的方法來處理這種情況?

+0

你不能。如果用戶想停止用戶代理(例如瀏覽器),他們可以。瀏覽器中的「停止」按鈕也會發生同樣的情況。 – jfriend00

+0

讓頁面在間隔後輪詢訂單的狀態,以便它可以檢索所需的重定向,而無需實際發送訂單。 –

+0

@DaveAnderson - 我不明白。你能澄清嗎? – Dave

回答

0

我不知道你正在嘗試做的,但正是我假設留在頁面成功摧毀了你的網站的邏輯後,我去給你一些提示

但要注意有對於這個問題沒有最終的解決方案,用戶可以點擊瀏覽器上的停止按鈕,或者他可以一起關閉標籤!

所以我假定這只是爲了防止用戶錯誤只

第一種方式:當成功回調的觸發器,使一個布爾變量作爲標誌保護的成功狀態,現在當用戶再次提交,如果這是真的,你可以重新定向,或者甚至可以把一個計時器,試圖重定向每隔x秒,例如基於這個標誌

第二種方法:(我不確定如果這個工作!)註冊一個鍵盤事件退出按鈕,並使用event.stopPagagation消耗事件,這可能甚至與瀏覽器有關

0

您r原始提交將Ajax請求發送給某個web服務以履行例如/ordersubmit。訂單成功後,Web服務中的邏輯將返回重定向響應。響應可能需要一段時間,用戶可以在收到響應之前取消請求。

創建一個新的Web服務,例如/orderstatus,檢查訂單,如果它已成功返回/ordersubmit將會返回相同的重定向響應。如果訂單仍未處理或發生錯誤,則返回合適的消息主體。

網絡訂單頁面有一個定時器,在初始Ajax請求到/ordersubmit後啓動。當定時器到期時,頁面發送一個新的Ajax請求到/orderstatus並作用於響應。

如果響應不是重定向,則啓動一個新的定時器並再次檢查。如果三次嘗試後命令還不完整,請顯示一條合適的消息,要求他們聯繫支持人員。

+0

如何知道該命令是否尚未創建(或已創建,但由於腳本已停止而未傳回ID)? – Dave

+0

如果您有一個用戶帳戶將其作爲參考的一部分包含在訂單中,請生成一個唯一的請求參考。如果你有.Net可能使用會話ID作爲參考的一部分。您可以創建唯一的客戶端,並可以使用下一個請求發送,並允許您將其與原始訂單提交相匹配。 –

+0

稍微複雜一點的是,在發送訂單的其餘部分之前,生成訂單參考服務器端所需的快速初始Ajax請求。 –