在我的结帐表单中,我必须使用一些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值
我尝试了不同的对象,超时和其他一些方法,但问题是另一个对象内的函数阻止我按正确的顺序对它们进行排序
非常感谢每一次练习。
答案 0 :(得分:1)
Braintree.js劫持了表单提交事件,因此您应该能够在$.validate
回调中调用paymentMethodNonceReceived
,并且永远不会提交表单。我想你的整合最终会看起来像这样:
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;
}
});
}
});
答案 1 :(得分:0)
新的BT库解决了这个问题。