0

我正在尝试在我的编辑用户页面中创建一个添加/编辑信用卡表单。为此,我试图在我的客户控制器中实现对编辑和创建函数的 ajax 调用。

这是我在模式窗口中更新按钮的代码:

<%= button_tag "Update", :class =>"btn submit-button", :type => 'button', :onclick => "onUpdateCard('#{current_user.id}');"%>

这是它调用的函数:

function onUpdateCard(id) {
this.id = id;

// disable the submit button to prevent repeated clicks
$('.submit-button').attr("disabled", "disabled");
var card_number = document.getElementById('card_number').value;
var card_code = document.getElementById('card_code').value;
var card_month = document.getElementById('card_month').value;
var card_year = document.getElementById('card_year').value;

var response = Stripe.createToken({
    number: $('#card_number').val(),
    cvc: $('#card_code').val(),
    exp_month: $('#card_month').val(),
    exp_year: $('#card_year').val()
}, stripeResponseHandler);        
// allow the form to submit with the default action
return false;
};

function stripeResponseHandler(status, response) {
if (response.error) {
    $(".payment-errors").text(response.error.message);
    $(".submit-button").removeAttr("disabled");
} else {
    var token = response['id'];
    var new_url = "/users/" + this.id + "/customers/new";
    var edit_url = "/users/" + this.id + "/customers/1/edit";
    $.ajax({
        type:'GET',
        url:  edit_url,
        data: {'stripe_card_token': token}
    });
}
return false;
};

在控制器中有编辑功能:

def edit
    @user = current_user
    @customer = @user.customer    
    stripe_customer = Stripe::Customer.retrieve(@customer.stripe_customer_token)
    stripe_customer.card = params[:stripe_card_token]
    stripe_customer.save
end

你能帮我弄清楚如何正确处理ajax吗?我不确定如何正确调试...

4

1 回答 1

3

在这里,我建议使用 AJAX 处理更新请求的替代方法。

我不是在改进或更正您的代码,而是为您提供一种在 Rails 3 中处理 AJAX 请求的方法。

一个。看法

无论您想使用 AJAX 调用在数据库中更新什么信息,您都将通过一个表单。因此,要发出 AJAX 请求,您需要在表单中添加 :remote => true 。Rails 提供了这个助手。

<%= form_for @customer, :url => admin_customers_path, :method => :post, :remote => true, :html => { :id => "customer-form" } do |form|-%>
      <%= render :partial => 'admin/customers/form', :object => form %>
      <%= form.submit 'Update' %>
<% end %>

在 _form.html.erb 中,您可以添加文本字段或其他任何您想在编辑表单中添加的内容

湾。控制器

因为 " :remote => true " 你的表单提交会发出一个 JS 请求,所以在保存客户控制的数据后的更新操作中,它将为 format.js,然后它会在视图中查找 update.js.erb。

def update
  if @customer.update_attributes(params[:customer])
    respond_to do |format|
      format.html {
                  flash[:success] = "customer's info was updated Successfully."
                  redirect_to customers_path
      }
      format.js
    end
  else
    respond_to do |format|
      format.html {
                  flash[:error] = @customer.errors.present? ? @customer.errors.full_messages.join('<br />') : "Oops! There is some problem with category update."
                  render :edit
      }
      format.js
    end
  end
end

C。更新.js.erb

更新成功后就可以做事了。假设您想突出显示一些 div,那么您可以这样做。

  $('.target-div').effect("highlight", {}, 2500);
于 2012-12-23T10:09:53.637 回答