【发布时间】:2014-10-26 10:27:56
【问题描述】:
我在阅读本 Stripe 教程 (https://stripe.com/docs/tutorials/forms) 时遇到了无限循环。
$j('#payment-form').submit(function(){
var $form = $j(this);
$j('#submit',$form).prop('disabled',true);
Stripe.card.createToken($form,stripeResponseHandler);
return false;
});
// Stripe Callback
function stripeResponseHandler(status,response){
var $form = $j('#payment-form');
if(response.error){
/* Show the errors on the form */
$j('.payment-errors',$form).addClass('msg error_msg').text(response.error.message);
$j('#submit',$form).prop('disabled', false);
} else {
var token = response.id;
$form.append($j('<input type="hidden" name="stripeToken" />').val(token));
$form.get(0).submit();
}
};
createToken 响应处理程序说要使用 $form.get(0).submit() 重新提交表单而不重新触发初始提交侦听器,但我收到一个控制台错误说 $form.get(. .).submit 不是函数。
将 $form.get(0).submit() 更改为 $form.submit() 会启动循环。
根据我找到的其他一些建议,我在提交侦听器中添加了对令牌的检查,如果令牌存在则返回 true。这打破了循环,但表单永远不会提交。
$j('#payment-form').submit(function(){
if(typeof $j('input[name="stripeToken"]').val() !== 'undefined'){
return true;
}
var $form = $j(this);
$j('#submit',$form).prop('disabled',true);
Stripe.card.createToken($form,stripeResponseHandler);
return false;
});
我正在使用 jQuery 1.11.1。
感谢任何帮助。谢谢!
【问题讨论】:
-
尝试将
this而不是$form传递给createToken -
不走运,仍然在 $form.get(0).submit() 处循环或抛出 TypeError...
-
为什么 $form.get(0) 没有按预期工作?
-
检查文档,有些地方不对,文档很好
-
我正在直接从文档中学习教程。
标签: jquery infinite-loop stripe-payments