2010-09-15 2 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? (Попробуйте «рейк-маршруты» grep test_email_admin_email_blast », чтобы увидеть, как Rails интерпретирует ваши маршруты.rb) – tobym

+0

Да. test_email_admin_email_blast GET /admin/email_blast/test_email(.:format) {: controller => "admin/email_blasts",: action => "test_email"} – Trip

ответ

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

Да, но как это подключается к моему контроллеру rails? Как установить vars для моего Notifier? – Trip

+1

Все это делает, он отправляет запрос AJAX на '/ testemail /? Subject = foo & body = bar' и выполняет возвращенный javascript из этого действия контроллера. –

+0

Справа. Я получил эту часть. Но он не отвечает на мой вопрос, как эти переменные могут быть прочитаны контроллером rails. Тем не менее я ценю помощь. – Trip

3

Предполагая, что вы получаете представить правильно работать на основе Дарина Димитрова ответить, то вам нужно использовать объект Params В данном случае это выглядит как все. вам нужно сделать, это Params доступа [: предметный] и Params [: тело]. в своем действии контроллера

EDIT:.

в ответ на комментарий, 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

Форма ниже не работает. Вары не переходят к параметрам [: subject] или любому другому. Это потому, что его «GET», а не «POST»? Я попробовал оба, также убедившись, что мой участник маршрута: post post. Когда запрос route.rb и ajax-запрос POST, я получаю сообщение «Только почтовые запросы разрешены». когда они оба GET, я получаю нулевой параметр. – Trip

+0

Контроллер получает удар. Я поставил отладчик прямо перед тем, как я определяю параметры. Но как только я туда доберусь, все они определены как «nil». Странно? Я попробовал свой метод serialize() и поместил уникальный идентификатор вокруг своей формы, и это не дает. – Trip

+1

Где именно ваш отладчик ... после 'def test_email'? – tobym

Смежные вопросы