我对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 %>
当表单发布时,我收到一封电子邮件,但它没有运行成功代码(因为它没有输出“谢谢!”)
答案 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