2017-07-30 8 views
0

私はRailsには新人ですが、thisの回答で私に電子メールを送信するフォームをまとめましたが、成功セクションでコードを実行します。Railsのajaxフォームは電子メールを送信しますが、 "成功"のコードは実行しません

これは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 

これは形式である:

フォームがIが受信転記さ
<%= 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

add:remote => form_forにtrue – Wordica

答えて

0

をコントローラに

を、あなたは有効なJSONを有し、また、ステータスを返す必要がありますコード200。 、

class Welcome3Controller < ApplicationController 
    def subscribe 
    EmailMeMailer.confirmation(params[:sub_email]).deliver_now 

    render json: { success: true }, status: 200 
    end 
end 
0

追加:

:remote=> true 

のform_for、とする:あなたのAJAXでの成功コールバックに到達取得するには

+0

私は上記を試みましたが、変更されませんでした何でも – Seio

0

あなたはJSONレスポンスを要求している場合は、代わりhead :ok

def subscribe 
    EmailMeMailer.confirmation(params[:sub_email]).deliver_now 

    respond_to do |format| 
    format.json { head :no_content } 
    end 
end 
head :no_contentを使用する:あなたのコードは次のようになります

render json: { success: true }, status: 200 

:あなたのコントローラでこれを置くために

てみてください

関連する問題