代码之家  ›  专栏  ›  技术社区  ›  Trip

如何将AJAX变量从jQuery传递到它们的控制器?

  •  5
  • Trip  · 技术社区  · 15 年前

    我有一份电子邮件表格。但我正在制作一个测试电子邮件表单,用户可以在其中添加一个独特的电子邮件,并让电子邮件测试将其发送到特定的电子邮件。

    我不知道如何将变量从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
    

    路由.rb

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

    2 回复  |  直到 15 年前
        1
  •  7
  •   Darin Dimitrov    15 年前

    你可以用这个 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;
    });
    
        2
  •  3
  •   Peer Allan    15 年前

    假设您根据darindimitrov的答案让submit正常工作,那么您需要使用params对象。在本例中,看起来您只需在控制器操作中访问params[:subject]和params[:body]。

    编辑:

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

    如果它仍然不起作用,那么你最好看看你的控制器动作是否被击中了。