2010-09-15 34 views
5

我有一個電子郵件表格。但是,我正在製作一個測試電子郵件表單,用戶可以添加一封唯一的電子郵件,並通過電子郵件測試將其發送到該特定的電子郵件。如何將AJAX的vars從jQuery傳遞到他們的控制器?

爲了方便起見,我決定通過ajax使測試電子郵件執行,並將整個內容粘貼到其他電子郵件表單中。

我無法弄清楚如何從我的HAML變量發送到我的控制器

new.html.haml

- form_tag admin_email_blast_path do 
    Subject 
    %br 
    = text_field_tag 'subject', :class => "mass_email_subject" 
    %br 
    Body 
    %br 
    = text_area_tag 'message', '', :name => 'editor1', :class => "mass_email_body" 
    %br/ 
    = submit_tag 'Send Email', :class => 'button' 

    .grid_3.right.align_right.suffix_1 # <= TEST EMAIL :D 
    = text_field_tag 'email', nil, :style => "width: 150px;", :class => "test_email_address" 
    = link_to 'Test Email', test_email_admin_email_blast_path, :class => 'button test_email' 

JS

$(".test_email").live("click", function() { 

    var email = $(".test_email_address") 
    var subject = $(".mass_email_subject"); 
    var body = $(".mass_email_body"); 

    data = "email=" + email.val() + "&subject" + subject.val() + "&body" + body.val(); 

    $.ajax({type: "GET", 
      url: $(this).attr("href"), 
      dataType: "script" 
      data: data 
      }); 
    return false; 
}); 

控制器

def test_email 
    debugger 
    email = params[:email] 
    subject = params[:subject] 
    body = params[:body] 
    Notifier.deliver_email_blast(email, subject, body) 
end 

的routes.rb

admin.resource :email_blast, :member => { 
           :test_email => :get 
           } 

我道歉提前如果這是一個愚蠢的新手問題。 :(

+1

test_email_admin_email_blast_path是否接受GET請求? (嘗試使用「rake routes | grep test_email_admin_email_blast」來查看Rails如何解釋您的routes.rb) – tobym 2010-09-15 18:41:59

+0

是的。 test_email_admin_email_blast GET /admin/email_blast/test_email(.:format){:controller =>「admin/email_blasts」,:action =>「test_email」} – Trip 2010-09-15 19:05:36

回答

7

您可以使用data參數:

$('.test_email').live('click', function() { 

    var subject = $('.mass_email_subject'); 
    var body = $('.mass_email_body'); 

    $.ajax({ 
     type: 'GET', 
     url: this.href, 
     dataType: 'script', 
     data: { subject: subject.val(), body: body.val() } 
    }); 
    return false; 
}); 
+0

是的,但是如何連接到我的軌道控制器?如何爲我的通知程序設置增值稅? – Trip 2010-09-15 17:10:10

+1

所有這些都是向'/ testemail /?subject = foo&body = bar'發送一個AJAX請求並執行從此控制器操作返回的JavaScript。 – 2010-09-15 17:25:18

+0

對。我把那部分弄下來了。但它並沒有回答我的問題,這些變量如何被軌道控制器讀取。儘管如此,我很欣賞幫助。 – Trip 2010-09-15 17:31:21

3

假設你正在提交基於達林季米特洛夫回答,那麼你需要使用params對象才能正常工作。在這種情況下,它看起來像所有。你需要做的就是訪問PARAMS [:主題],而params [:身體]。在你的控制器動作

編輯:

在迴應的意見,GET和POST做出PARAMS沒有差別形式不工作,請嘗試修改你JS使用序列化和在失敗時返回一個錯誤:

$(".test_email").live("click", function() { 

    var subject = $(".mass_email_subject") 
    var body = $(".mass_email_body") 

    $.ajax({type: "GET", 
      url: $(this).attr("href"), 
      dataType: "script" 
      data: $('#form_id').serialize(), 
      error: function(){ alert("There was a problem, please try again.") } 
      }); 
    return false; 
}); 

如果仍不能再工作,你更好看,看看你的控制器動作被擊中的。

+0

下面的表格不起作用。這些變量不會傳遞給params [:subject]或任何其他變量。那是因爲它是「GET」而不是「POST」?我嘗試了兩種方法,同時確保我的路線成員是:發佈請求。當routes.rb請求和ajax請求是POST時,我得到'只允許發佈請求。當他們都GET,我得到一個零參數。 – Trip 2010-09-15 18:11:02

+0

控制器正在被擊中。當我定義params之前,我把調試器放在了前面。但是一旦我到達那裏,它們都被定義爲「無」。奇怪的權利?我嘗試了你的serialize()方法,並在我的表單周圍放置了一個唯一的ID,但它沒有給出。 – Trip 2010-09-15 18:36:52

+1

「def test_email」之後你的調試器到底在哪裏? – tobym 2010-09-15 19:22:01

相關問題