Обратный вызов worldpay useTemplateForm
Я реализовал worldpay на своем одностраничном угловом приложении (angular 1.x). Я использую метод useTemplateForm() для создания формы кредитной карты и получения токена. Все работает нормально, за исключением того, что моя функция обратного вызова (которая установлена в useTemplateForm) вызывается несколько раз после получения токена.
Это связано с вызовом useTemplateForm при каждом всплывающем окне платежей. Worldpay.js каким-то образом складывает эти обратные вызовы, а не очищает их, и я понятия не имею, как это предотвратить. Мне нужно вызывать useTemplateForm каждый раз, когда всплывает окно, потому что элемент (div), содержащий iframe, уничтожается каждый раз, когда закрывается окно оплаты. Уничтожение этого элемента не сбрасывает сложенные обратные вызовы.
Я могу справиться с этим по-разному, но вместо этого я использую некоторый метод, чтобы предотвратить суммирование бесконечного количества обратных вызовов, потому что в конце он просто потребляет ненужные ресурсы.
Кто-нибудь есть идеи, как это исправить?
1 ответ
Поэтому я не думаю, что есть действительно надежное решение для этого, но я нашел кое-что, что останавливает суммирование обратных вызовов.
Решение (не продукт)
Если вы удалите прослушиватель событий WorldPay, ваш зарегистрированный обратный вызов больше не будет вызываться:
window.removeEventListener("message", Worldpay.template.messageListener, false);
1) При успешном обратном вызове (не рекомендуется)
Вы могли бы поместить это в обратный вызов успеха Worldpay.useTemplateForm
Конфиг, если вы всегда выгружаете templateForm
в случае успеха:
'callback': function (obj) {
window.removeEventListener("message", Worldpay.template.messageListener, false);
worldPaySuccessCallBack(obj)
},
2) Когда вы удалили форму WorldPay из DOM
У меня нет большого опыта с Angular
но когда у тебя больше нет Worldpay
форма отображается тогда я бы назвал removeEventListener
линия.
3) По компоненту WillUnmount (реагировать)
Я случайно столкнулся с этой проблемой, используя react
поэтому я положил removeEventListener
линия в componentWillUnmount
из моего Worldpay
составная часть.
пожалуйста, обратите внимание
Причина, по которой я не рекомендую использовать этот подход в производстве, заключается в том, что если вы загружаете WorldPay
библиотека через cdn
( https://cdn.worldpay.com/v1/worldpay.js), затем он использует неверсионную библиотеку.
Worldpay в настоящее время размещает обновления по этому последнему URL:WorldpayJS v0.75.1 - Wed, 17 Jan 2018 12:10:44 GMT
Итак Worldpay.template.messageListener
Путь объекта может измениться в любой момент, если они не следуют нормальному semver
правила.