调试条带支付coffeescript
我有以下代码:调试条带支付coffeescript,coffeescript,stripe-payments,Coffeescript,Stripe Payments,我有以下代码: order = setupForm: -> $('.new_order').submit -> $form = $(this) $form.find('input[type=submit]').attr('disabled', true) order.processCard($form) false processCard: ($form)-> card = number: $
order =
setupForm: ->
$('.new_order').submit ->
$form = $(this)
$form.find('input[type=submit]').attr('disabled', true)
order.processCard($form)
false
processCard: ($form)->
card =
number: $form.find('.card_number').val()
cvc: $form.find('.card_code').val()
expMonth: $form.find('.card_month').val()
expYear: $form.find('.card_year').val()
Stripe.createToken card, (status, response) ->
order.handleStripeResponse(status, response, $form)
handleStripeResponse: (status, response, $form) ->
if status == 200
$form.find('.order_stripe_card_token').val(response.id)
$form.submit()
else
$form.find('.stripe_error').text(response.error.message)
$form.find('input[type=submit]').attr('disabled', false)
它完全可以呈现错误(如果卡号错误/丢失等),但当我输入Stripe提供的正确的卡详细信息时,它不会提交任何内容
我确信我遗漏了一些非常明显的东西,但需要一些新的眼光来指出错误所在。您的问题是您的提交处理程序调用了您的提交处理程序,后者调用了您的提交处理程序,后者 事件的顺序如下所示:
processCard
processCard
通过stripe.createToken
对stripe进行AJAX调用createToken
回调调用handleStripeResponse
handleStripeResponse
调用$form.submit()
,带有一个提交按钮和以下代码:
hand_break = 0
ajax_simulator = ($f) ->
fn = ->
console.log("AJAX callback called: #{hand_break}")
$f.submit()
setTimeout(fn, 500)
$('#f').submit ->
return false if(++hand_break > 3)
console.log("submit handler called: #{hand_break}")
ajax_simulator($(@))
false
当你点击submit按钮时,你会看到它循环了三次,hand\u break
这个东西就是用来手动停止无限循环的
演示:
那么,如何打破这种循环呢?您的$('.new_order').submit
处理程序需要知道何时返回false
以及何时返回true
,如果您返回true
,则表单将提交到服务器,一切都会正常。您已经在存储条带令牌:
$form.find('.order_stripe_card_token').val(response.id)
所以你可以检查一下是否有:
$('.new_order').submit ->
return true if($form.find('.order_stripe_card_token').val())
#...
您需要确保
.order\u stripe\u card\u token
已正确初始化、错误清除等。回答得非常好,感谢您带领我了解错误的整个过程。