好吧,我对此非常接近,但我需要一些帮助来克服驼峰。我正在尝试通过AJAX在rails应用程序中提交表单,该应用程序发送电子邮件,然后在成功时执行一些代码。当我在表单上输入时,AJAX正在运行,因为我收到了电子邮件。但是,成功代码未运行(也不是错误)。我也尝试'完成:'但是这不起作用,所以我怀疑它可能是默认表单行为的一些问题?想法?
这是ajax:
// AJAX Function to submit email form without refreshing page
$("#contact_me").submit(function(){
var dataSet = $(this).serialize();
$.ajax({
type: "POST",
url: $(this).attr("action"),
data: dataSet,
success: function(){
alert("Sent!");
},
error: function(){
alert("Something went wrong!");
}
});
return false;
})
它所称的rails动作:
def email_me
name = params[:name]
email = params[:email]
content = params[:text]
ContactMailer.first_contact(name, email, content).deliver
head :ok
end
此外,表单本身
<%= form_tag({controller: "main", action: "email_me"}, id: "contact_me", remote: "true") do %>
<div>
<p><%= label_tag(:name, "Name") %>
<%= text_field_tag(:name) %></p>
</div>
<div>
<p><%= label_tag(:email, "Email") %>
<%= email_field(:user, :email) %></p>
</div>
<div>
<p><%= label_tag(:text, "What's on your mind?") %></p>
<%= text_area_tag(:text)%>
</div>
<%= submit_tag("Say Hello!")%>
<% end %>
答案 0 :(得分:2)
这真的是导致最大问题的小事。我忘了将整个函数包装在函数(){..}中。去图,现在很棒。感谢所有人的帮助。
$(function(){
$("#contact_me").submit(function(){
var dataSet = $(this).serialize();
$.ajax({
type: "POST",
url: $(this).attr("action"),
data: dataSet,
complete: function(){
alert("Sent!");
},
error: function(){
alert("Something went wrong!");
}
});
return false;
});
})
答案 1 :(得分:0)
完全随机猜测,请原谅我,如果它是荒谬的,是否render :nothing => true
阻止Rails发起回调?
答案 2 :(得分:0)
您的rails应用应返回JSON。您正在调用JSON请求,它应该是JSON响应。我希望这有帮助。
答案 3 :(得分:0)
尝试渲染空白的json,因为你的JS期待JSON响应。
渲染:json =&gt; {}