2

好吧,我已经很接近了,但我需要一些帮助来克服困难。我正在尝试通过 AJAX 在 Rails 应用程序中提交表单,该应用程序发送电子邮件,然后在成功时执行一些代码。当我在表单上按 Enter 时,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 %>
4

4 回答 4

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;
    });
})
于 2013-06-21T16:46:19.063 回答
0

尝试渲染空白 json,因为您的 JS 期待 JSON 响应。

渲染:json => {}

于 2013-06-21T16:23:10.080 回答
0

完全随机的猜测,如果这很荒谬,请原谅我,它会render :nothing => true阻止 Rails 触发回调吗?

于 2013-06-21T16:14:06.807 回答
0

您的 rails 应用程序应该返回 JSON。您正在 ajaxing 一个 JSON 请求,它应该是一个 JSON 响应。我希望这有帮助。

于 2013-06-21T16:15:31.773 回答