Предотвратить двойную обработку запросов - PullRequest
0 голосов
/ 30 ноября 2011

Я работаю со сторонней платежной службой, которая отправляет моего пользователя обратно на мой сайт после осуществления платежа на их сайте. Он отправляет пользователя обратно с помощью JavaScript (setTimeout и location='my_site.com?data'), но есть также кнопка, которую пользователь может нажать, если это займет слишком много времени. Двойной запрос происходит, когда браузер уже загружает мой сайт из-за JavaScript, и пользователь нажимает кнопку.
Могу ли я предотвратить обработку запроса дважды? Или я должен просто справиться с этим дважды?

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

Ответы [ 3 ]

3 голосов
/ 30 ноября 2011

В идеале кнопка должна быть отключена у вашего поставщика услуг, но в противном случае вам пришлось бы изящно управлять ею на вашей стороне ...

1 голос
/ 30 ноября 2011

В этом случае вы хотите, чтобы ваш пользователь получал правильную обратную связь, и из того, что вы сказали, вы знаете, что в настоящее время он теряет ответ на первый запрос.

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

Если все равно, вы можете отобразить страницу "правильно обработано", независимо от того, в первый или второй или десятый раз они зашли на страницу.

Другие методы, позволяющие справиться с этим, могут включать ускорение возврата целевой страницы. Предположительно, проблема в том, что на вашей стороне выполняется разумный объем работы, который заставляет их сдаться и пойти на щелчок. Если вы можете сократить это время для отображения контента, то это может решить вашу проблему немного лучше. Это может быть что-то вроде возврата на маленькую страницу с фирменным знаком вашего сайта и надписью «Пожалуйста, подождите, пока мы обработаем ваш заказ» или что-то еще. Это затем передает контроль в вашу руку и позволяет вам более разумно иметь дело со сценарием двойного щелчка в начале.

Точное решение будет зависеть от вашей конкретной ситуации.

1 голос
/ 30 ноября 2011

Просто отключите кнопку отправки перед вызовом form.submit():

document.getElementById("submit").disabled=true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...