【问题标题】:Rails - Redirecting after AJAX POSTRails - AJAX POST 后重定向
【发布时间】:2017-04-30 02:01:21
【问题描述】:

我正在尝试做一些我认为非常简单的事情 - 为用户订阅 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 时如何进行重定向?还是我完全错过了其他东西?

【问题讨论】:

  • 哈哈,谢谢你,罗克韦尔赖斯。我不知道这是一件事......现在有效。

标签: ruby-on-rails ajax redirect stripe-payments


【解决方案1】:

只需将数据类型设为 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 = '/'`
    });
  }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-26
    • 2014-08-07
    • 2022-01-25
    • 2021-12-04
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    相关资源
    最近更新 更多