1

У меня есть одностраничное приложение (SPA), построенное с помощью DurandalJS v1.2, которое интегрируется с платежным шлюзом. SPA отправится на страницу платежного шлюза, выполнив обычную форму POST на свою страницу.Избегайте повторной отправки формы в SPA (без P-R-G)

После того, как пользователь закончил на странице платежных шлюзов, платежный шлюз затем выполнит форму POST обратно в мой SPA.

Поскольку это POST, я обрабатываю его на стороне сервера в ASP.NET MVC, визуализируя определение модуля require.js для различных отправляемых параметров формы, и этот модуль затем используется в модели представления, которая должна обрабатываться результат.

Это все работает отлично, я обрабатываю результат, а затем остаюсь на той же странице SPA. Это отличается от типичного веб-шаблона Post-Redirect-Get, поскольку SPA не делает никаких переадресаций.

Проблема заключается в нажатии кнопки обновления браузера, в результате чего открывается диалоговое окно подтверждения повторной отправки браузера (чего я не хочу).

Есть ли способ избежать этого, используя JavaScript или шаблон PRG - единственный способ?

Примечание: Кажется, что изменение window.location, document.location, а также использование history.replaceState не работают (по крайней мере, в Chrome).

+1

Возможно, если я обновляю браузер и принимаю повторную отправку формы, так как я действительно изменяю хэш до этого, URL-адрес моего SPA, входящего в состав обновления, не является тем, который обрабатывает ответы платежного шлюза, и поэтому он не обрабатывает его во второй раз. Тем не менее, диалог подтверждения все еще раздражает. – jamiebarrow

ответ

1

Если вы можете изменить шлюз оплаты, перехватите отправку формы (<form onsubmit="...; return false">), обработайте поля формы из JavaScript, а не позвольте браузеру отправить их на сервер.

Если вы не можете изменить шлюз оплаты, измените document.location на JavaScript сразу после возврата POST (например, добавив #). Если после этого пользователь нажимает повторно, браузер не будет запрашивать подтверждение.

+0

Он отправляется с другого сайта, а не на мою страницу. Я не могу изменить платежный шлюз, так как это совершенно отдельная система. – jamiebarrow

+0

Я добавил еще одну идею. – pts

+0

спасибо за предложение, я не упомянул, что я уже пытался изменить хэш – jamiebarrow

Смежные вопросы