[英]Rails - Redirecting after AJAX POST
我正在尝试做一些我认为非常简单的事情-为用户订阅Stripe订阅计划,并在成功后将他们重定向到根路径。 没有什么花哨。
我有3个计划,我在Rails控制器中定义了这些计划,并遍历每个计划为每个计划创建一个Stripe处理程序。 我认为这些处理程序如下所示:
handlers["#{count}"] = StripeCheckout.configure({
key: "#{ENV['stripe_publishable_key']}",
locale: 'auto',
token: function(token) {
$.ajax({
url: `/subscriptions`,
method: 'POST',
data: {
"stripeToken": token.id,
"stripeEmail": token.email,
"stripe_price": "#{plan[:stripe_price]}",
"plan": "#{plan[:name]}",
"description": "Subscription to #{plan[:name].capitalize} plan"
},
dataType: 'json',
success: `window.location = '/'`
});
}
});
我最近添加了成功回调,只是为了使它在成功时重定向到某个地方。 没工作...
事件监听器:
document.getElementById("subscriptionButton-#{count}").addEventListener('click', function(e) {
handlers["#{count}"].open({
name: "#{plan[:name].capitalize} plan",
description: "Sign up for #{plan[:name].capitalize} plan",
email: "#{current_user.email}",
amount: "#{plan[:stripe_price]}"
});
e.preventDefault();
});
就将数据发送到我的订阅控制器而言,一切工作都非常完美,我可以在Stripe上成功创建订阅。 我需要做的就是重定向用户。
我在控制器中使用的块是:
flash[:success] = "Successfully signed up"
puts "Got here"
respond_to do |format|
puts request.format
format.js { render js: "window.location = '#{root_path}';" }
end
request.format
返回application/json
。 我以为它将返回js,因为它正在响应AJAX请求。 这是搞砸重定向的原因吗? 如果是这样,当格式为json时如何进行重定向? 还是我完全想念其他东西?
只需将数据类型设为javascript
handlers["#{count}"] = StripeCheckout.configure({
key: "#{ENV['stripe_publishable_key']}",
locale: 'auto',
token: function(token) {
$.ajax({
url: `/subscriptions`,
method: 'POST',
data: {
"stripeToken": token.id,
"stripeEmail": token.email,
"stripe_price": "#{plan[:stripe_price]}",
"plan": "#{plan[:name]}",
"description": "Subscription to #{plan[:name].capitalize} plan"
},
dataType: 'script', <--- right here
success: `window.location = '/'`
});
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.