我有一個事件需要在執行重定向之前聯繫某些第三方提供商(請考慮'電子商務網站上的最終付款頁面'),因此存在一些與其處理。非常重要的是不要多次聯繫這些第三方提供商,有時不耐煩的用戶可能會嘗試刷新頁面(因此會重新提交數據)。一般的代碼結構是:Response.Redirect由於代碼阻止重新提交而不能觸發
If Session("orderStatus") <> 'processing' Then
Session("orderStatus") = 'processing'
DoThirdPartyStuffThatTakesSomeTime()
Response.Redirect("confirmationPage.asp", True)
End If
問題是,如果用戶刷新頁面,則Response.Redirect的情況不會發生(即使代碼的其餘部分將來自最初提交的重定向之前運行)。看來新的提交爲瀏覽器創建了一個新的線程,它優先 - 它跳過這段代碼顯然是爲了防止第三方提供商第二次聯繫,並且由於沒有重定向,只是返回到同一頁面。整個第二次提交可能在第一次提交完成工作之前完成。
任何幫助,我仍然可以忽略頁面的所有後續提交,但仍然使重定向工作...?
感謝
嗨Oded, 謝謝你的回答。不幸的是,重定向只能在第三方內容完成後纔會發生。如果我將其移出,第二次提交會首先觸發並在第三方內容完成之前重定向。 – Marco 2010-04-21 16:59:40
然後將它移動到'DoThirdPartyStuffThatTakesSomeTime()'函數的末尾。 – Oded 2010-04-21 17:00:31
它已經 - 我的代碼示例只是說明。這更多的是兩個線程以兩種不同的方式同時運行相同的事件(由於會話變量停止代碼運行兩次)。看起來最後一個線程優先於瀏覽器的位置,而我需要首先優先。 – Marco 2010-04-21 17:05:36