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

Posted

技术标签:

【中文标题】Rails ajax 表单发送电子邮件但不在“成功”下运行代码【英文标题】:Rails ajax form sends emails but doesn't run the code under "success" 【发布时间】:2018-01-06 06:31:09 【问题描述】:

我对 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 %>

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

【问题讨论】:

将 :remote => true 添加到 form_for 【参考方案1】:

要在您的 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】:

添加:

:remote=> true 

到form_for,和:

respond_to do |format|
  format.js
end

到控制器

【讨论】:

【参考方案3】:

如果您要请求 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

【讨论】:

以上是关于Rails ajax 表单发送电子邮件但不在“成功”下运行代码的主要内容,如果未能解决你的问题,请参考以下文章

如何捕获表单值并通过电子邮件作为 ajax 请求发送?导轨

使用 mail() PHP 脚本的 jQuery AJAX 表单发送电子邮件,但来自 HTML 表单的 POST 数据未定义

使用 PHP 和 AJAX 发送电子邮件表单

联系表格 7 不在我的 WAMP 本地主机上工作

PHP邮件函数发送电子邮件,但AJAX函数出错

如何绑定到表单的 ajax:使用 JQuery/Rails UJS 在 typescript 中取得成功