1

在我的结帐表单中,我必须使用一些 jQuery 验证插件来验证复杂的验证过程,在跟踪结束时我发送这样的表单数据

 $.validate({
        modules: 'security , date',
        onSuccess: function () {
          
               // do Ajax call
            return false;
        },
    });

但我也像这样使用 Braintree 设置

 braintree.setup($("#btCilentToken").val(), 'dropin', {
        container: 'dropin', paymentMethodNonceReceived: function (event, nonce) {

           //get nonce save to javascript variable that be used in my final ajax call           
        }
    });

现在的问题是

发送表单数据-> 标记化开始-> 发送表单数据结束-> (此处某处将 nonce 值响应返回到服务器)-> 标记化结束

所以我因为延迟错过了nonce值

我尝试了不同的对象、超时和其他一些方法,但问题是另一个对象内部的函数阻止我按正确的顺序对它们进行排序

非常感谢每一次实践。

4

2 回答 2

1

Braintree.js 劫持了表单提交事件,因此您应该能够$.validatepaymentMethodNonceReceived回调中调用并且永远不会提交表单。我想你的集成最终会是这样的:

braintree.setup($("#btClientToken").val(), 'dropin', {
  container: 'dropin',
  paymentMethodNonceReceived: function (event, nonce) {
    $.validate({
      modules: 'security , date',
      onSuccess: function () {
        // do Ajax call and use nonce
        return false;
      }
    });
  }
});  
于 2014-11-11T23:04:46.383 回答
0

新的 BT 库解决了这个问题。

于 2016-10-31T06:03:54.180 回答