2010-09-15 10 views
5

Ich habe ein Email-Formular. Aber ich mache ein Test-E-Mail-Formular, in dem ein Benutzer eine eindeutige E-Mail hinzufügen und den E-Mail-Test an diese E-Mail senden lassen kann.Wie übergibt man AJAX vars von jQuery an ihren Controller?

Um es einfach zu machen, habe ich beschlossen, die Test-E-Mail über Ajax durchzuführen und das Ganze in das andere E-Mail-Formular einzukleben.

Ich kann nicht herausfinden, wie die Variablen aus meinem 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 meinem Controller

$(".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; 
}); 
senden

Steuerung

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 
           } 

Ich entschuldige mich vor der Zeit, wenn diese Frage eine dumme Neuling ist. :(

+1

Akzeptiert test_email_admin_email_blast_path GET-Anfragen? (Versuchen Sie "Rake-Routen | grep test_email_admin_email_blast", um zu sehen, wie Rails Ihre Routen interpretiert.rb) – tobym

+0

Ja. test_email_admin_email_blast GET /admin/email_blast/test_email(.:format) {: controller => "admin/email_belastungen",: aktion => "test_email"} – Trip

Antwort

7

könnten Sie verwenden den data Parameter:

$('.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

Ja, aber wie funktioniert das mit meinem Rails-Controller? Wie lege ich die Variablen für meinen Notifier fest? – Trip

+1

All dies bewirkt, dass eine AJAX-Anfrage an '/ testemail /? Subject = foo & body = bar' gesendet wird und das zurückgegebene Javascript von dieser Controller-Aktion ausgeführt wird. –

+0

Rechts. Ich habe diese Rolle verloren. Aber es beantwortet meine Frage nicht, wie diese Variablen vom Rails Controller gelesen werden können. Ich schätze trotzdem die Hilfe. – Trip

3

Angenommen, Sie bekommen die einreichen richtig auf der Grundlage eines Darin Dimitrov beantworten, dann müssen Sie das params-Objekt verwenden In diesem Fall sieht es aus wie alle. Sie tun müssen, um Zugang params ist [: subject] und params [: body]. in Ihrem Controller-Aktion

EDIT:.

Als Reaktion auf den Kommentar, GET und POST machen keinen Unterschied zu params Wenn die Form funktioniert nicht, versuche es Ändern Sie JS serialize verwenden und einen Fehler bei einem Fehler zurück:

$(".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; 
}); 

Wenn es immer noch nicht funktioniert, dann Sie besser sehen zu sehen, ob Ihr Controller-Aktion überhaupt getroffen wird.

+0

Das folgende Formular funktioniert nicht. Die Variablen gehen nicht an params [: subject] oder irgendeinen anderen. Ist das, weil es ein "GET" und kein "POST" ist? Ich habe beides versucht und auch sichergestellt, dass mein Route-Mitglied eine: post-Anfrage ist. Wenn die routes.rb-Anfrage und die Ajax-Anfrage ist POST, dann bekomme ich ein 'Nur Post-Anfragen sind erlaubt'. Wenn sie beide GET sind, bekomme ich einen Nullpunkt. – Trip

+0

Der Controller wird getroffen. Ich habe einen Debugger direkt vor, wenn ich die Parameter definiert. Aber sobald ich dort angekommen bin, sind sie alle definiert zu "Null". Seltsam, oder? Ich habe versucht, Ihre serialize() -Methode, und legen Sie eine eindeutige ID um mein Formular, und es gibt nicht. – Trip

+1

Wo genau ist dein Debugger ... nach 'def test_email'? – tobym

Verwandte Themen