JavaScript AJAX& Rails控制器(来回)

时间:2012-10-07 15:43:15

标签: javascript ruby-on-rails ruby ruby-on-rails-3 javascript-events

我在Rails控制器和JS文件之间来回发送信息。

  1. 我通过JS(作品)将表单发送给控制器

    $("#help-email-submit").ajaxSubmit({url: '/help/send_help_email', type: 'post' });
    
  2. 我能够在控制器(工作)中捕获事件

    def send_help_email
      ....
    end
    
  3. 在发送上述请求的同一JS文件中,如何捕获JSON响应(如下所示)? (不起作用)

    def send_help_email
      ...
      cst_str = @current_support_ticket.to_s
      respond_to do |format|
        format.json { render :json => cst_str }
      end
    end
    

    在JS文件中

    var xmlhttp = new XMLHttpRequest();
    alert(xmlhttp.responseText);
    

  4. 更新

    我注意到一个阻止成功的JS错误:执行函数:

    错误

    TypeError:'undefined'不是函数(评估'$(“#help-email-form”)。ajaxSubmit({url:'/ help / send_help_email',type:'post',complete:handlerResponse}) “)

    这是触发错误的行

    $("#help-email-form").ajaxSubmit({url: '/help/send_help_email', type: 'post', complete: handlerResponse })
    

    这是完整的块

    var handlerResponse = function(data) {
    alert(data);
    };
    
    $('#help-email-submit').live('click', function(e) {
        $('#sender-email-wrapper').fadeOut('fast', function() {
            $("#help-email-sent").fadeIn('slow');
        });
        $("#help-email-form").ajaxSubmit({url: '/help/send_help_email', type: 'post', complete: handlerResponse })
        e.preventDefault();
    });
    

1 个答案:

答案 0 :(得分:1)

根据ajaxSubmit documentation,它接受​​与jQuery.ajax method相同的选项。因此,要获得响应,您可以将complete回调传递给调用:

var handleResponse = function(data) {
  // Use response here
};

$("#help-email-submit").ajaxSubmit({url: '/help/send_help_email', type: 'post', complete: handleResponse });

根据您使用的jQuery版本,您还可以通过complete方法对jQuery.ajax的返回值传递回调:

$("#help-email-submit").ajaxSubmit({url: '/help/send_help_email', type: 'post'}).complete(function(data) {
  // Use response here
});