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 表单发送电子邮件但不在“成功”下运行代码的主要内容,如果未能解决你的问题,请参考以下文章
使用 mail() PHP 脚本的 jQuery AJAX 表单发送电子邮件,但来自 HTML 表单的 POST 数据未定义