Rails在ajax请求上关闭fancybox

时间:2012-12-17 10:55:25

标签: jquery ruby-on-rails ajax fancybox

我一直在尝试很多东西,我无法理解这个问题。 首先,我在fancybox中有一个部分形式。

这是:* _form.html.erb *

 <%= form_tag sessions_path , remote:true , id: "login_form" do %>
 <div class="field">
  <%= label_tag :email %>
  <%= text_field_tag :email, params[:email] %>
 </div>
 <div class="field">
  <%= label_tag :password %>
  <%= password_field_tag :password %>
 </div>
  <div class="actions"><%= submit_tag "Inloggen" %></div>
 <% end %>

我使用app.js

中的jQuery函数在此表单中发布数据
jQuery('#login_button').fancybox({
  type: 'ajax'
})


jQuery('#login_form').submit(function() {  
    var data = jQuery(this).serialize();

        $.getJSON('sessions/new.js?callback=?&variable=loginData', { 
        loginData: data 
        }, function(data) {

            if(data == 0){
                alert('Your account is not activated yet');
            }
            if(data == 1){
                alert('Password incorrect');
            }
            // login correct
            if(data == 2){
                 //$.fancybox.close();
                 window.parent.jQuery.fn.fancybox.close();
            } 
        });

    return false;
});

问题是我在fancybox中没有得到反馈。 如果我检查控制台是否有XHR请求,它会发送数据并得到相应的响应,但是fancybox没有关闭,我也没有收到任何警报。

最后但并非最不重要的是我的会话控制器

  def create
@user = User.find_by_email(params[:email])

#if there is a user with that e-mail, is it activated?
if @user
  if @user.user_level != '1' 
    @response = 1
  end
end

#check the login information with has_secure_password, user has to be activated
if @user && @user.authenticate(params[:password]) && @user.user_level == '1'
  session[:user_id] = @user.id
  @response = 2
else
  @response = 0
end

respond_to do |format|
  format.json { render :json => @response }
end

如果响应等于2,如何关闭fancybox? 我怎样才能在fancybox中向用户显示他们的输入不正确?

1 个答案:

答案 0 :(得分:1)

respond_to do |format|
  format.js do
    if @response == 2
      render :js => "$('#fancybox-content').remove();"
    end
  end
end

或创建create.js.erb:

# controller
respond_to do |format|
  format.js { }
end

# create.js.erb

<% if @response == 2 %>
  $('#fancybox-content').remove();
<% end %>

这是一种基本方法。如果在创建失败时需要其他行为,请扩展代码。