Rails ajax表单发送电子邮件但不运行“成功”下的代码

时间:2017-07-30 18:15:50

标签: jquery ruby-on-rails ajax forms post

我对Rails很新,但是我设法将一个表单放在一起,在提交时发送给我一封电子邮件,感谢this回答,但它没有在成功部分运行代码。

这是JQuery Ajax代码:

$('#sub_form').submit(function(e) {
  e.preventDefault();
}).validate({
  rules: {
    email: {
      required: true,
      email: true
    },
  },
  submitHandler: function (form) {

     var btn = $('#sub_btn');
    btn.button('loading');
    setTimeout(function() {
      btn.button('reset');
    }, 3000);


    $.ajax({
      type: 'POST',
      url: '/subscribe',
      dataType: 'json',
      async: true,
      data: {

        sub_email: $('#sub_email').val(),
      },
      success: function (json) {
        $('#sub_output').html("Thank you!");
        $("#sub_email").prop('disabled', true);
      },

    });

    return false;
  }
});

这是控制器:

class Welcome3Controller < ApplicationController
  def subscribe
    EmailMeMailer.confirmation(params[:sub_email]).deliver_now

    respond_to do |format|
      format.json { head :ok }
    end
  end
end

这是表格:

<%= form_for :subscribe, html: { id: 'sub_form' } do |f| %>
  <input type="email" name="email" placeholder="Your email address" id="sub_email">
  <button class="btn btn-success" type="submit" id="sub_btn">Subscribe</button><br>
  <p id="sub_output" class="lead" style="color: white;"></p>
<% end %>

当表单发布时,我收到一封电子邮件,但它没有运行成功代码(因为它没有输出“谢谢!”)

3 个答案:

答案 0 :(得分:0)

添加:

:remote=> true 

到form_for,并且:

respond_to do |format|
  format.js
end

到控制器

答案 1 :(得分:0)

要在AJAX中获得成功回调,您需要拥有有效的json并返回状态代码200

尝试将其放入您的控制器中:

render json: { success: true }, status: 200

您的代码如下所示:

class Welcome3Controller < ApplicationController
  def subscribe
    EmailMeMailer.confirmation(params[:sub_email]).deliver_now

    render json: { success: true }, status: 200
  end
end

答案 2 :(得分:0)

如果您要请求JSON回复,请使用head :no_content代替head :ok

def subscribe
  EmailMeMailer.confirmation(params[:sub_email]).deliver_now

  respond_to do |format|
    format.json { head :no_content }
  end
end